我有两张地图。我需要比较键和值。
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
的示例密钥mymap
与b
中的d
和mymap1
进行比较。
如果在其他mymap1
中找到相同的密钥,我需要比较这些值。
所以我需要比较键和值。我怎么能用C ++做到这一点?
答案 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
}
}