比较键和值std :: maps

时间:2017-10-05 20:26:25

标签: c++ c++11 dictionary

我有两张地图。我需要比较键和值。

map<char,int> mymap;
mymap.insert(pair<char,int>('a', 1));
mymap.insert(pair<char,int>('c', 2));

map<char,int> mymap1;
mymap1.insert(pair<char,int>('b', 1));
mymap1.insert(pair<char,int>('d', 2));

将来自a的示例密钥mymapb中的dmymap1进行比较。

如果在其他mymap1中找到相同的密钥,我需要比较这些值。

所以我需要比较键和值。我怎么能用C ++做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您需要查看两个地图是否相同,请使用mymap1 == mymap2 - 它已在std::map中实施。如果您需要更复杂的使用,请使用以下内容:

auto it1 = mymap1.begin();
auto it2 = mymap2.begin();
while( true ) {
   bool end1 = it1 == map1.end();
   bool end2 = it2 == map2.end();
   if( end1 and end2 ) break;
   if( !end1 and ( end2 or it1->first < it2->first ) ) {
       std::cout << "key:" << it1->first << " not found in map2" << std::endl;
       ++it1;
       continue;
   } 
   if( end1 or it2->first < it1->first ) {
       std::cout << "key:" << it2->first << " not found in map1" << std::endl;
       ++it2;
       continue;
   } 
   if( it1->second != it2->second ) {
       std::cout << "values for key:" << it1->first << " are different" << std::endl;
   }
   ++it1;
   ++it2;
}

只需用您的逻辑替换std::cout输出。

答案 1 :(得分:1)

您可以尝试这样的事情:

for (auto iter = mymap.begin(); iter != mymap.end(); iter++) {
    auto iter1 = mymap1.find(iter->first);
    if (iter1 != mymap1.end()) {
        // compare iter->second with iter1->second
    }
}