将对象存储在vector中,该对象位于C++中的地图内

Kar*_*san 1 c++ maps vector

我正在尝试创建一个包含字符串键和myClass向量的映射.

std::map<string,vector<myClass>> m;
Run Code Online (Sandbox Code Playgroud)

我还需要动态填充矢量和地图(从文件中读取值).

class myClass{
string dataMember1;
...
myClass()
     { ...  }
};
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

此外,我希望能够基于字符串键访问向量中的对象.

例如:

std::map<string,vConnect>::iterator pos;
pos = mapGraph.find(string);
cout<<(pos->second)[0]->DataMemberofmyClass
Run Code Online (Sandbox Code Playgroud)

will(pos-> second)[0]表示存储在向量中的第一个myClass对象??

谢谢

Jam*_*nze 5

通常,当映射类型是容器时,只使用[] 到处都可以正常工作; 如果该条目不存在,则将使用空容器创建,例如:

m[key].push_back( newElement );
Run Code Online (Sandbox Code Playgroud)

要么

m[key].begin(), m[key].end()
Run Code Online (Sandbox Code Playgroud)

甚至:

if ( !m[key].empty() )
    doSomethingWith( m[key].second[0] );
Run Code Online (Sandbox Code Playgroud)

工作正常.如果您对同一个元素进行了大量操作(与前两种情况一样),您可能希望将其保存在引用中:

std::vector<MyClass>& elem = m[key];
//  ...
Run Code Online (Sandbox Code Playgroud)

关于唯一的例外是如果您没有修改元素,并且如果条目为空则不想创建条目.在这些情况下,您需要find并进行测试:

std::map<std::string, std::vector<MyClass>>::const_iterator
                entry = m.find( key );
if ( entry != m.end() ) {
    std::vector<MyClass>& elem = entry->second;
    //  ...
}
Run Code Online (Sandbox Code Playgroud)