簡體   English   中英

對於std :: map,reverse_iterator上的“ operator-”不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM