Vector of Structures

前端 未结 6 431
悲哀的现实
悲哀的现实 2021-01-18 11:42

I have some code given to me by another person in which we have a structure

struct Pair {
    string s1;
    string s2;
    bool equivalent;
  };


        
相关标签:
6条回答
  • 2021-01-18 12:12

    You can use Boost.Assign, which is a syntactic sugar for creating a vector and then populating it:

    using std::vector<int>;
    using namespace boost::assign;
    vector<int> v = list_of(Pair("s11", "s12", true)(Pair("s21", "s22", false));
    
    0 讨论(0)
  • 2021-01-18 12:17
    void staticdata() {
        Pair temp[] =
        {
            {"string","string2",true}, 
            {"string","string3",true}, 
            {"string","string4",false}, 
            {"string","string7",false}, 
            {"string3","string8",false}
        };
    
        PairID.assign(temp,temp+5);
    }
    
    0 讨论(0)
  • 2021-01-18 12:18

    Your code is not legal C++. It is legal C++0x but there have been many changes to the language. So if you want to compile this code as C++ code, you'll need to change it.

    PigBen's solution is one way, the problem with it being the temporary data could be constructed & destroyed many times, or live for a long time.

    Here's another way:

        struct Pair {
            string s1;
            string s2;
            bool equivalent;
          };
    
        Pair make_Pair(const string& s1, const string& s2, bool equivalent)
        {
            Pair ret;
            ret.s1 = s1;
            ret.s2 = s2;
            ret.equivalent = equivalent;
            return ret;
        }
    
        // somewhere in the init code...
            std::vector<Pair> PairID;
    
    
       PairID.push_back(make_Pair("string","string2",true)); 
        PairID.push_back(make_Pair("string","string3",true));
        PairID.push_back(make_Pair("string","string4",false));
        PairID.push_back(make_Pair("string","string7",false));
        PairID.push_back(make_Pair("string3","string8",false));
    
    0 讨论(0)
  • 2021-01-18 12:25

    If you know the size of vector in advance then you can go for this

    You can use any temporary instance of structure and assign the default values to that and then use a normal assignment like

    typedef struct mystruct{
        int x;
        char name[10];
    }mystruct;
    
    mystruct default;
    default.x = 1;
    strcpy(default.name,"default_name");
    vector <mystruct> v(10,default);
    
    0 讨论(0)
  • 2021-01-18 12:29
    struct Pair 
    {
       string s1;
       string s2;
       bool equivalent;
    };
    std::vector<Pair> PairID;         
    
    Pair pair;
    
    pair.s1 = "abc";
    pair.s2 = "abc";
    pair.equivalent = TRUE;
    
    PairID.push_back(pair);
    
    0 讨论(0)
  • 2021-01-18 12:37

    Why is it failing?

    Because it’s not valid C++. It will be, in C++0x. But as of yet, it’s just not valid. And since your compiler doesn’t yet support C++0x, you will need to do it the hard way, i.e. populate the vector one element at a time, or copy from a C array …:

    Pair data[] ={ {"string","string2",true}, 
        {"string","string3",true}, 
        {"string","string4",false}, 
        {"string","string7",false}, 
        {"string3","string8",false} };
    PairID.assign(data, data + sizeof(data) / sizeof(Pair));
    

    (This will require the algorithm and iterator standard headers.)

    0 讨论(0)
提交回复
热议问题