2013-09-06 2 views
0

Как добавить данные на карту, содержащую ключ int и значение, которое представляет собой структуру без предварительного создания и определения фактического объекта с типом структуры? В основном у меня есть:Сохранение данных структуры на карте в C++

struct myStruct { string name2; int aCnt; std::list<string> theItems; }; 

// Now I define a map 
std::map<string, myStruct> myMap; 

// Now I want to add items to myMap. 
mymap["ONE"] = {"TEN", 3, {"p1","p2","p3"}}; // But this doesn't seem to work 

// I know I could do something like 
myStruct myst; 
myst.name2 = "TEN"; 
myst.aCnt = 3; 
...blah blah 

mymap["ONE"] = myst; 

// But I don't want to have to write all of those lines especially because 
// this is being done as an initialization of the map. 

Thanks!

+0

Вы используете C++ 11? – GWW

+0

Скажем, да, я. – GregH

+0

Давайте спросим вас * действительно *? = P После исправления множества опечаток это работает в C++ 11 [(Смотрите это в прямом эфире)] (http://ideone.com/a97JRX) – WhozCraig

ответ

0

Если вы используете C++ 11, этот код уже работает:

#include <iostream> 
#include <map> 
#include <string> 
#include <list> 
using namespace std; 


struct myStruct { string name2; int aCnt; std::list<string> theItems; }; 
int main() 
{ 

     // Now I define a map 
     std::map<string, myStruct> myMap; 

     // Now I want to add items to myMap. 
     myMap["ONE"] = {"TEN", 3, {"p1","p2","p3"}}; // But this doesn't seem to work 





     return 0; 
} 

И компилировать:

[email protected]:~/test$ g++ struct.cpp -o struct -std=c++11 
[email protected]:~/test$ 

Если нет, то вы не повезло, но все основные компиляторы должны поддерживать инициализацию C++ 11 - убедитесь, что вы получили последнюю версию.

+0

Да, я пробовал использовать параметр C++ 11, но, видимо, он не работает. Моя среда не должна его поддерживать. Есть ли другой способ сделать это не под C++ 11? – GregH

+0

Взгляните на http://www.boost.org/doc/libs/1_36_0/libs/assign/doc/index.html –

+0

@GregH, см. Http://stackoverflow.com/questions/138600/ для примера из Nemanja sugestion. – mMontu

Смежные вопросы