我希望你能幫助我。我已經搜索了其他答案,但我還沒有找到符合我的具體情況的東西(但是如果您確實找到了一個答案,請讓我知道網址!)。我看到很多關於使用std :: map而不是list的建議,我不介意在需要時切換容器。比較2 std :: std ::對列表
目前,我有對兩個列表即
std:list <std::pair<string,string>> outputList1;
std:list <std::pair<string,string>> outputList2;
我已填充與我已經從SQL數據庫(I省略這裏的SQL檢索代碼)檢索用戶設置每一個清單。
實施例列表:
outputList1(第一,第二)
CanSeeAll,真
CanSubmit,假
CanControl,假
OutputList2:
CanSeeAll,假
CanSubmit,真
CanControl,False
我想遍歷這兩個列表並找到不匹配。例如,找到第一個列表的第一個對的第一個字符串,在第二個列表中查找匹配的第一個字符串,然後比較第二個字符串以確定它們是否匹配,然後將不匹配的對打印到新的字符串中(最終以文件形式)等等。
在這個例子中,最後一個字符串將CanSeeAll和CanSubmit作爲最終輸出,因爲這兩個是不匹配的。
這是我到目前爲止已經試過,但我得到一個空字符串:
std::list <std::pair<std::string,std::string>>::iterator it1 = outputList1.begin();
std::list <std::pair<std::string,std::string>>::iterator it2 = outputList2.begin();
string token;
while (it1 != outputList1.end()){
if((*it1).first == ((*it2).first))
{
if((*it1).second != ((*it2).second))
{
token.append((*it1).first);
token.append(",");
token.append((*it1).second);
token.append("\r\n");
}
it1++;
it2 = outputList2.begin();
}
it2++;
if (it2 == outputList2.end())
it1++;
}
我知道這個邏輯是有缺陷的,因爲它會在第一次迭代後,跳過第二個名單上的第一對,但這是目前我能想到的最好的,當下我正在敲鍵盤。
謝謝大家!
這兩個列表是否包含相同的第一對?如同,如果你將列表結合在一起,每個設置都會有2個? – user975989
如果列表中的任何一個包含多個具有相同「第一個」值的'std :: pair',您預期會發生什麼? –
這兩個列表是否總是包含相同的密鑰? – Oebele