在 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. 周末玩一下云技术,kvm 相关笔记

    由于需要将企业的很贵的显卡和主机装在一个虚拟主机,用来跑  ue5 和 sd3  用来给用户临时使用,但是怎么将主机虚拟出来成多个主机呢,自己没有有钱请不起人,只能自己学一下虚拟化技术,第一步主机开启 ...

  2. 利用Elasticsearch实现地理位置、城市搜索服务

    最近用到一些简单的地理位置查询接口,基于当前定位获取用户所在位置信息(省市区),然后基于该信息查询当前区域的......提供服务. 然后就自己研究了下GIS,作为一个程序员.自己能不能实现这个功能呢? ...

  3. PKUWC2024游记

    PKUWC2024 游记 day -???? 得知今年冬令营在育才,非常高兴不用出远门了. day 1 当天上午 7:00 起来,然后做车去报道,非常堵车.感觉育才环境挺好的,~不像某人在读学校一样. ...

  4. 买卖股票相关算法-动态规划-python

    要求1: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票.设计 ...

  5. 【Java】【常用类】Date 日期类

    java.util.Date java.sql.Date 创建日期对象和打印结果 public class DateTest { public static void main(String[] ar ...

  6. 【C3】01 概述

    CSS (层叠样式表) 让你可以创建好看的网页,但是它具体是怎么工作的呢? 这篇文章通过一些很简单的例子,告诉我们什么是 CSS, 同时还会涉及一些和 CSS 相关的专业术语. 预备知识: 基本的计算 ...

  7. 【SqlServer】02 SSMS工具基本使用入门

    之前的安装中除了SqlServer,还有一个SSMS管理工具 数据库的访问依赖于工具 SSMS提供了两种登陆方式: 创建用户: 删除用户: 创建数据库: 删除数据库: 创建表: 设置表的字段,字段名称 ...

  8. ubuntu系统conda下运行pytorch报错:ImportError: libopenblas.so.0: cannot open shared object file

    如题: ubuntu系统conda下运行pytorch报错:ImportError: libopenblas.so.0: cannot open shared object file 网上找了一些资料 ...

  9. Ubuntu系统中CUDA套件nvvp启动后报错Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to unnamed module @380fb434

    最近在看cuda方面的内容,需要对cuda代码做一些性能分析,于是需要使用nvvp,但是启动nvvp后报错:Caused by: java.lang.reflect.InaccessibleObjec ...

  10. flex数据绑定

    1 .方法绑定    [Bindable(event="myFlagChanged")] private function isEnabled():String { if (myF ...