在 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. 在Django REST framework (DRF) 中,`request.query_params` 和 `request.data` 区别

    在Django REST framework (DRF) 中,request.query_params 和 request.data 都是用来获取请求中的数据,但是它们之间有一些关键的区别: requ ...

  2. ComfyUI插件:IPAdapter_plus(新版)节点

    ComfyUI插件:IPAdapter_plus(新版)节点 前言: 学习ComfyUI是一场持久战,而IPAdapter_plus是常用且便捷有效的风格迁移模型,可以通过提供参考图像去进行图像的生成 ...

  3. 全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

    全网最适合入门的面向对象编程教程:31 Python 的内置数据类型-对象 Object 和类型 Type 摘要: Python 中的对象和类型是一个非常重要的概念.在 Python 中,一切都是对象 ...

  4. 【转载】 tensorflow batch_normalization的正确使用姿势

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/computerme/article/de ...

  5. 强化学习算法之DQN算法中的经验池的实现,experience_replay_buffer部分的实现

    本文的相关链接: github上DQN代码的环境搭建,及运行(Human-Level Control through Deep Reinforcement Learning)conda配置 ----- ...

  6. 2.3.6版本发布!Apache SeaTunnel Zeta引擎迎来新架构!

    Apache SeaTunnel 2.3.6 版本于近日正式发布,社区期待的 SeaTunnel Zeta Master/Worker 新架构.事件通知机制.支持动态编译的transform等新功能和 ...

  7. 旧物利用 - 将机顶盒改造为一台Linux开发机!

    前言 机顶盒型号:移动魔百盒CM201-2(CH),芯片组: hi3798mv300(hi3798mv3dmm),其他型号类似 理论上适用于以下SOC:Hi3798Mv100 / Hi3798Cv20 ...

  8. python学习(一)django orm多表查询

    ###多表查询 一般的多表查询都是直接建立一个多对多关系 class Books(models.Model): users = models.ManyToManyField(User, related ...

  9. spring手动事务控制

    在项目开发中需要用到手动事务进行控制.现说下遇到的问题以及解决方案: 如果程序需要使用嵌套事务,则需要在配置文件中添加一个配置属性,如下: <bean id="transactionM ...

  10. Zabbix创建模板(templates)及监控项(item)

    Zabbix监控--Zabbix创建模板(templates)及监控项(item) 生产环境中,有一个简单的原则,那就是无监控不上线,监控系统开源方案中,zabbix也算不错的选择.由于其系统接口的开 ...