[英]Gnu's reverse_iterator<Iterator>::operator-> and proxy iterators
[英]No match for “operator-” on reverse_iterator for std::map
我有一個std::map
,我試圖以一種有效的方式將所有條目與所有其他條目進行比較。 我的思考過程是,我將有一個嵌套循環,其起始點位於當前入口之后。
我有以下代碼作為我要完成的任務的示例:
#include <iostream>
#include <string>
#include <map>
int main(int argc, char* argv[])
{
std::map<std::string, std::string> m;
m["one"] = "a";
m["two"] = "b";
m["three"] = "c";
m["four"] = "d";
m["five"] = "e";
m["six"] = "f";
m["seven"] = "g";
for (auto outerIterator = m.begin(); outerIterator != m.end(); ++outerIterator)
{
std::cout << outerIterator->second << std::endl;
for (auto innerIterator = outerIterator + 1; innerIterator != m.end(); ++innerIterator)
{
std::cout << " > " << innerIterator->second << std::endl;
}
}
return 0;
}
嘗試此操作時,出現以下錯誤:
error: no match for ‘operator+’ (operand types are ‘std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> > >’ and ‘int’)
for (auto innerIterator = outerIterator + 1; innerIterator != m.end(); ++innerIterator)
^
顯然,它不喜歡我嘗試進入下一個條目的方式(我是根據使用std::vector
一個工作示例進行嘗試的)。 是否可以僅使用std::map
完成我想做的事情,還是我需要重新考慮我的方法並選擇其他存儲數據的方式?
std::map::iterator
不是隨機訪問的迭代器,因此它沒有operator+(int)
。 您可能會解決此問題:
for (auto outerIterator = m.begin(); outerIterator != m.end(); )
{
std::cout << outerIterator->second << std::endl;
for (auto innerIterator = ++outerIterator; innerIterator != m.end(); ++innerIterator)
{
std::cout << " > " << innerIterator->second << std::endl;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.