2017-10-05 108 views
1

我有兩張地圖。我需要比較鍵和值。比較鍵和值std :: maps

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

實施例關鍵amymap與在mymap1bd比較。

如果在其他mymap1中找到了相同的密鑰,我需要比較這些值。

所以我需要比較鍵和值。我如何在C++中做到這一點?

+0

不應該很難。你能告訴我們你到目前爲止嘗試過什麼,你在哪裏碰到? – Mahesh

+0

'mymap == mymap1;' – nwp

+0

@nwp我認爲如果兩個地圖都相同,OP不會查找。 – Mahesh

回答

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

你可以嘗試這樣的事:

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 
    } 
} 
+0

這太無效了,2個迭代器可以在沒有find()的情況下在一個循環中使用。甚至如果OP需要找出地圖是否相等,甚至可以使用map1 == map2。 – Slava

+0

我的目標是簡單,看到OP對於std :: maps來說是新的。 – frslm

+0

@Slava:你將如何實現這個使用1循環和2迭代器沒有'find()'? –