我计划使用带有两个键的地图来完成我的作业。我创建了我的地图,如下所示:
map<pair<string, string>, int> myMap;
map<pair<string, string>, int>:: iterator it;
我很难使用 map.find() 和 map.insert() 来查找地图中的现有条目,或者如果两个键组合是新的,则插入一个新值。有人可以举个例子吗?
它应该与任何地图相同,除了您必须为您的密钥配对。
插入 :
map< pair<string,string>, int > mymap;
pair<string, string> key = make_pair("bob", "sue");
mymap[ key ] = 5; // you can inline make_pair if you prefer.
// or you can use insert method
mymap.insert( key, 5 );
寻找 :
pair<string, string> key = make_pair("bob", "sue");
auto it = mymap.find( key ); // you can inline make_pair if you prefer.
if ( it != mymap.end() )
{
cout << it->second;
}
请注意,在映射中使用字符串作为键可能会出现性能问题。此外,对中字符串的顺序也很重要。
你应该看看Boost multiIndex
it = myMap.find(make_pair("hi","mike"));
insert
有点尴尬,因为您要插入一对,其第一个组件也是一对:
myMap.insert(make_pair( make_pair("hi","john"), 4 ) );
这有效:
typedef pair<string, string> key_type;
map<key_type, int> myMap;
myMap.insert(std::make_pair(key_type("a","b"),1));
map<pair<string, string>, int>::iterator it;
it = myMap.find(key_type("a","b"));
insert
可以emplace
在 C++11 中替换为以缩短代码:
myMap.emplace(key_type("a","b"),1);