验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

C++中的map怎么使用

阅读:636 来源:乙速云 作者:代码code

C++中的map怎么使用

      C++中的map

      map的介绍

      map是一种使用键值对的数据结构,它允许我们使用键来查找值。map中的键必须是唯一且有序的,而值可以重复并且没有特定的顺序。

      map中的数据以树结构进行组织,其中每个节点都由一个键和一个值组成。根据键的大小,节点被插入到正确的位置以保持树的有序性。这使得在map中查找值非常高效,因为我们可以使用二分查找来快速定位值。

      创建和初始化map

      我们可以使用C++标准库中的map头文件来创建和初始化一个map。以下示例展示了如何创建一个map并将几个键值对添加到其中:

      #include 
      #include 
      
      using namespace std;
      
      int main()
      {
          // 创建一个空的map
          map myMap;
      
          // 向map中添加键值对
          myMap.insert(pair(1, "apple"));
          myMap.insert(pair(2, "banana"));
          myMap.insert(pair(3, "cherry"));
      
          // 输出map中的元素
          for (auto it = myMap.begin(); it != myMap.end(); ++it) {
              cout << it->first << " : " << it->second << endl;
          }
          
          return 0;
      }

      输出:

      1 : apple
      2 : banana
      3 : cherry

      在上面的示例中,我们首先创建了一个空的map,然后使用insert()函数将一些键值对添加到其中。最后,我们使用迭代器遍历该map并输出每个键值对。

      我们还可以使用初始化列表来初始化map。以下示例展示了如何使用初始化列表来创建并初始化一个map:

      map myMap {
          {"apple", 1},
          {"banana", 2},
          {"cherry", 3}
      };

      map中的查找操作

      向map中添加元素后,我们可以使用其键来查找相应的值。使用find()方法可以在map中查找给定键的值。如果键存在,则find()方法返回指向该元素的迭代器。否则,它将返回指向map结尾的迭代器。

      以下示例展示了如何在map中查找值:

      #include 
      #include 
      
      using namespace std;
      
      int main()
      {
          map myMap {
              {"apple", 1},
              {"banana", 2},
              {"cherry", 3}
          };
      
          // 在map中查找元素
          auto it = myMap.find("apple");
          if (it != myMap.end()) {
              cout << "apple is found" << endl;
          } else {
              cout << "apple is not found" << endl;
          }
      
          it = myMap.find("pear");
          if (it != myMap.end()) {
              cout << "pear is found" << endl;
          } else {
              cout << "pear is not found" << endl;
          }
          
          return 0;
      }

      输出:

      apple is found
      pear is not found

      在上面的示例中,我们首先创建了一个map并向其中添加了一些键值对。然后,我们使用find()方法在map中查找给定的键,如果找到则输出相应的消息。

      map的删除操作

      我们可以使用erase()方法从map中删除元素。erase()函数需要一个迭代器作为参数,可以使用find()方法查找迭代器,然后使用erase()方法来删除元素。以下示例展示了如何从map中删除特定键值对:

      #include 
      #include 
      
      using namespace std;
      
      int main()
      {
          map myMap {
              {"apple", 1},
              {"banana", 2},
              {"cherry", 3}
          };
      
          // 删除map中的某个元素
          auto it = myMap.find("apple");
          if (it != myMap.end()) {
              myMap.erase(it);
          }
      
          // 输出map中的元素
          for (auto it = myMap.begin(); it != myMap.end(); ++it) {
              cout << it->first << " : " << it->second << endl;
          }
          
          return 0;
      }

      输出:

      banana : 2
      cherry : 3

      在上面的示例中,我们首先创建了一个map并向其中添加了一些键值对。然后,我们使用find()方法查找要删除的元素

      接下来我们来看看如何在map中遍历元素、如何使用自定义比较器排序map,以及如何使用lower_bound()和upper_bound()方法进行范围查找。

      map的遍历操作

      我们可以使用迭代器来遍历map中的元素。以下示例展示了如何使用迭代器遍历map:

      #include 
      #include 
      
      using namespace std;
      
      int main()
      {
          map myMap {
              {"apple", 1},
              {"banana", 2},
              {"cherry", 3}
          };
      
          // 输出map中的元素
          for (auto it = myMap.begin(); it != myMap.end(); ++it) {
              cout << it->first << " : " << it->second << endl;
          }
          
          return 0;
      }

      输出:

      apple : 1
      banana : 2
      cherry : 3

      在上面的示例中,我们使用迭代器遍历map中的所有元素,并输出每个键值对。

      在map中使用自定义比较器排序

      默认情况下,map按键的升序进行排序。如果我们要按照其他方式进行排序,我们可以使用一个自定义比较器来指定排序的规则。以下示例展示了如何使用自定义比较器按值进行排序:

      #include 
      #include 
      
      using namespace std;
      
      bool myComp(const pair& a, const pair& b) {
          return a.second > b.second;
      }
      
      int main()
      {
          map myMap {
              {"apple", 1},
              {"banana", 2},
              {"cherry", 3}
          };
      
          // 按值排序
          vector> vec(myMap.begin(), myMap.end());
          sort(vec.begin(), vec.end(), myComp);
      
          // 输出排序后的结果
          for (auto it = vec.begin(); it != vec.end(); ++it) {
              cout << it->first << " : " << it->second << endl;
          }
          
          return 0;
      }

      输出:

      cherry : 3
      banana : 2
      apple : 1

      在上面的示例中,我们定义了一个自定义比较器函数myComp来按值对map进行排序。然后,我们将map中的键值对存储在一个vector中,并使用自定义比较器来进行排序。最后,我们遍历已排序的vector并输出相应的键值对。

      使用lower_bound()和upper_bound()进行范围查找

      我们可以使用lower_bound()和upper_bound()方法来查找map中一定范围内的键值对。lower_bound()函数返回指向第一个大于等于给定键的元素的迭代器,而upper_bound()函数返回指向第一个大于给定键的元素的迭代器。

      以下示例展示了如何使用lower_bound()和upper_bound()方法查找map中给定范围的键值对:

      #include 
      #include 
      
      using namespace std;
      
      int main()
      {
          map myMap {
              {"apple", 1},
              {"banana", 2},
              {"cherry", 3},
              {"date", 4},
              {"elderberry", 5}
          };
      
          // 查找范围内的元素
          auto itlow = myMap.lower_bound("b");
          auto itup = myMap.upper_bound("d");
      
          // 输出找到的元素
          for (auto it = itlow; it != itup; ++it) {
              cout << it->first << " : " << it->second << endl;
          }
          
          return 0;
      }

      输出:

      banana : 2
      cherry : 3

      在上面的示例中,我们首先创建了一个map并向其中添加一些键值对。然后,我们使用lower_bound()和upper_bound()方法查找键值在范围内的元素。最后,我们遍历找到的元素并输出它们的键值对。

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>