我正在尝试创建一个包含字符串键和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对象??
谢谢
通常,当映射类型是容器时,只使用[]
到处都可以正常工作; 如果该条目不存在,则将使用空容器创建,例如:
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)
| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |