c++ - 遍历 3 个元素的映射

标签 c++ syntax iterator scope-resolution

我对在 C++ 中使用 STL 容器还很陌生。

我有一个包含 3 个元素的映射(2 个字符串成对 - 作为键,一个 int 作为值。)

map<pair<string, string>, int> wordpairs;

但是当我尝试像这样遍历它时:

  for (map<pair<string, string>, int> iterator i = wordpairs.begin(); i != wordpairs.end(); i++) {
      cout << i->first << " " << i->second << "\n";
    }

编译器抛出错误:

     error: expected ‘;’ before ‘i’
         for (map<pair<string, string>, int> iterator i = wordpairs.begin(); i != wordpairs.
                                                      ^
    error: name lookup of ‘i’ changed for ISO ‘for’ scoping [-fpermissive]
    a7a.cpp:46:50: note: (if you use ‘-fpermissive’ G++ will accept your code)

   error: cannot convert ‘std::map<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, int> >}’ to ‘int’ in assignment
         for (map<pair<string, string>, int> iterator i = wordpairs.begin(); i != wordpairs.
                                                        ^
    error: no match for ‘operator!=’ (operand types are ‘int’ and ‘std::map<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, int> >}’)
         for (map<pair<string, string>, int> iterator i = wordpairs.begin(); i != wordpairs.
                                                                               ^    

    error: expected ‘)’ before ‘;’ token
     pair<string, string>, int> iterator i = wordpairs.begin(); i != wordpairs.end(); i++) {
                                                                                    ^
   error: expected ‘;’ before ‘)’ token
     pair<string, string>, int> iterator i = wordpairs.begin(); i != wordpairs.end(); i++) {

不确定我在这里做错了什么 - 不过这应该是一个简单的修复。

最佳答案

  1. 您输入错误的类型(您使用了空格而不是 ::)。

  2. Map 迭代器给你一个键值对——而你的键是一对!所以你有一对和一对作为成员。这是一个大致可以完成您想做的事情的示例。

    #include <iostream>
    #include <map>
    #include <string>
    #include <utility>
    using namespace std;
    
    int main() {
      pair<string, string> my_key("To", "Be");
      map<pair<string, string>, int> wordpairs { { {"Hello", "World"}, 33} };
      for (const auto& kv : wordpairs) {
        cout << kv.first.first << ", " 
             << kv.first.second << static_cast<char>(kv.second);
      }
      return 0;
    }
    

关于c++ - 遍历 3 个元素的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445862/

相关文章:

c++ - 为什么在boost::bind中指定了参数placer后,调用时省略了?

c++ - 有没有办法在结构中存储日期和时间? C++

c++ - .cpp 文件中的 STRINGIFY

syntax - 有没有办法在循环的条件表达式中分配一个变量?

c++ - 如何在 C++ 中读取这种指针?

python - 在不使用生成器函数的情况下,如何在 Python 中实现与 itertools.count 等效的迭代器?

java - Struts2 迭代器用不同类型填充下拉列表

c++ - 为什么 STL 数值算法使用 'op' 而不是 'op=' ?

c - 在 C 中使用可变文件名从具有相似名称的多个文件中读取?

Python MySQLdb : Iterating over a cursor