在 C++ 标准库中,std::vectorstd::map 都支持以下比较运算符:

  • ==(相等运算符)
  • !=(不等运算符)
  • <(小于运算符)
  • <=(小于等于运算符)
  • >(大于运算符)
  • >=(大于等于运算符)

1. std::vector 的比较

对于 std::vector,这些运算符通过词典序比较(lexicographical comparison)进行。词典序比较类似于字符串的字母顺序,比较规则如下:

  • vector 的头开始,依次比较每个元素。
  • 如果两个向量的元素都相等,则继续比较下一个元素。
  • 如果找到了一个不相等的元素,直接根据这个元素的大小来决定结果。
  • 如果比较到最后所有的元素都相等,但一个向量比另一个短,那么较短的向量视为“更小”。

例子:

#include <iostream>
#include <vector> int main() {
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {1, 2, 4}; if (v1 < v2) {
std::cout << "v1 < v2" << std::endl; // 会输出,因为 3 < 4
} if (v1 != v2) {
std::cout << "v1 != v2" << std::endl; // 会输出,因为第3个元素不同
} return 0;
}

2. std::map 的比较

std::map 也是按词典序进行比较的,但它的比较基于键值对的顺序,而不是单独的键或值。std::map 是按照键进行排序的,因此比较时也遵循键的顺序,比较规则如下:

  • 首先按键进行比较,比较每个键是否相等。
  • 如果键相等,则进一步比较键对应的值。
  • 如果找到一个不相等的键,或一个相等的键其值不相等,直接根据这个结果返回比较值。
  • 如果所有键值对都相等,则视为相等。

例子:

#include <iostream>
#include <map> int main() {
std::map<int, std::string> map1 = {{1, "apple"}, {2, "banana"}};
std::map<int, std::string> map2 = {{1, "apple"}, {2, "carrot"}}; if (map1 < map2) {
std::cout << "map1 < map2" << std::endl; // 会输出,因为 "banana" < "carrot"
} if (map1 != map2) {
std::cout << "map1 != map2" << std::endl; // 会输出,因为键 2 对应的值不同
} return 0;
}

3. 比较运算符的适用条件

  • std::vectorstd::map 的比较运算符依赖于容器中元素或键、值的类型。如果元素或键、值的类型支持这些比较运算符,那么 std::vectorstd::map 的比较运算符就可以工作。例如,如果 std::vector 中的元素类型是用户自定义的类型,且这个类型没有定义比较运算符,编译器就会报错。

4. 小结

  • std::vectorstd::map 都支持 <, >, <=, >=, ==, != 这些比较运算符,并且都是按词典序进行比较。
  • 这些运算符的前提是,存储在 vectormap 中的类型(如元素、键和值)支持相应的比较运算符。

std::vector 和 std::map 都支持以下比较运算符的更多相关文章

  1. 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)

    string.vector 互转 string 转 vector vector  vcBuf;string        stBuf("Hello DaMao!!!");----- ...

  2. std::vector与std::list效能对比(基于c++11)

    测试对象类型不同,数量级不同时,表现具有差异: 测试数据对象为std::function时: test: times(1000)vector push_back time 469 usvector e ...

  3. 编程杂谈——std::vector与List<T>的性能比较

    昨天在比较完C++中std::vector的两个方法的性能差异并留下记录后--编程杂谈--使用emplace_back取代push_back,今日尝试在C#中测试对应功能的性能. C#中对应std:: ...

  4. Item 21: 比起直接使用new优先使用std::make_unique和std::make_shared

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 让我们先从std::make_unique和std::make_s ...

  5. c++转载系列 std::vector模板库用法介绍

    来源:http://blog.csdn.net/phoebin/article/details/3864590 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作 ...

  6. C++ 中的std::vector介绍(转)

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

  7. std::vector介绍

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

  8. std::array,std::vector,基于范围的for循环

    std::array除了有传统数组支持随机访问.效率高.存储大小固定等特点外,还支持迭代器访问.获取容量.获得原始指针等高级功能.而且它还不会退化成指针T *给开发人员造成困惑. for( 元素名变量 ...

  9. std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义

    std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义 这个容器保存了所有客户端连接的channel Channel2* Li ...

  10. 使用std::vector优化点云动画显示一例

    1. 准备 使用std::vector应该知道几点: (1)内存连续的容器,有点像数组 (2)与std::list相比,插入和删除元素比较慢- 因为数据迁移 (3)添加元素可能会引发内存分配和数据迁移 ...

随机推荐

  1. 【SpringBoot】16 数据访问P4 整合JPA

    DAO面向SpringData操作 Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问技术, 包括非关系数据库.Map-Reduce 框架.云数据服务等等: 另外也 ...

  2. 在哲学/自然科学范畴下“推理”(reason about)的类别及解释

    注意,本文的解释采用Google大模型(Gemini)的答案. 翻译: 推理是运用逻辑和证据得出结论的过程.它包含批判性地思考一个主题,考虑不同的观点,以及识别事物之间的关系.以下是推理的一些方式: ...

  3. OneFlow计算框架的OneAgent是不是一个子虚乌有的东西?

    自己是搞强化学习的,今天看了些OneFlow计算框架的一些资料,发现OneFlow官方一直有宣传自己的强化学习框架--OneAgent,但是十分诡异的是从了OneFlow的官方宣传可以看到这个词,但是 ...

  4. Google的TPU的逐元素操作特性 —— TPU数据操作时最基本的操作原语(primitive)

    地址: https://jax.readthedocs.io/en/latest/pallas/tpu.html TPU是原来进行矩阵计算加速的一个科学计算的设备,功能大致等同于NVIDIA的GPU的 ...

  5. tensorflow1.x——如何在C++多线程中调用同一个session会话

    相关内容: tensorflow1.x--如何在python多线程中调用同一个session会话 ================================================= 从 ...

  6. vue之条件判断v-if与v-show

    1.背景 2.v-if简单使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  7. Leetcode: 1484. Groups Sold Products By The Date

    题目要求如下: 输入的数据为 要求按照日期查询出每日销售数量及相应产品的名称,并按照字符顺序进行排序. 下面是实现的代码: import pandas as pd def categorize_pro ...

  8. 代码随想录Day10

    232.用栈实现队列 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x) 将 ...

  9. SMU Summer 2024 Contest Round 7

    SMU Summer 2024 Contest Round 7 Make Equal With Mod 题意 给定一个长度为 \(n\) 的数列 \(a\).你可以执行若干次操作,每次操作选择一个大于 ...

  10. CH03_布局

    第3章:布局 本章目标 理解布局的原则 理解布局的过程 理解布局的容器 掌握各类布局容器的运用 理解 WPF 中的布局 WPF 布局原则 ​ WPF 窗口只能包含单个元素.为在WPF 窗口中放置多个元 ...