2

我计划使用带有两个键的地图来完成我的作业。我创建了我的地图,如下所示:

map<pair<string, string>, int> myMap;
map<pair<string, string>, int>:: iterator it;

我很难使用 map.find() 和 map.insert() 来查找地图中的现有条目,或者如果两个键组合是新的,则插入一个新值。有人可以举个例子吗?

4

4 回答 4

3

它应该与任何地图相同,除了您必须为您的密钥配对。

插入 :

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;
}

请注意,在映射中使用字符串作为键可能会出现性能问题。此外,对中字符串的顺序也很重要。

于 2013-10-06T18:53:57.647 回答
1

你应该看看Boost multiIndex

于 2013-10-06T19:09:25.653 回答
1
it = myMap.find(make_pair("hi","mike"));

insert有点尴尬,因为您要插入一对,其第一个组件也是一对:

myMap.insert(make_pair( make_pair("hi","john"), 4 ) );
于 2013-10-06T18:47:30.690 回答
0

这有效:

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);
于 2013-10-06T18:48:48.923 回答