std::vector 和 std::map 都支持以下比较运算符
在 C++ 标准库中,std::vector 和 std::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::vector和std::map的比较运算符依赖于容器中元素或键、值的类型。如果元素或键、值的类型支持这些比较运算符,那么std::vector和std::map的比较运算符就可以工作。例如,如果std::vector中的元素类型是用户自定义的类型,且这个类型没有定义比较运算符,编译器就会报错。
4. 小结
std::vector和std::map都支持<,>,<=,>=,==,!=这些比较运算符,并且都是按词典序进行比较。- 这些运算符的前提是,存储在
vector和map中的类型(如元素、键和值)支持相应的比较运算符。
std::vector 和 std::map 都支持以下比较运算符的更多相关文章
- 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)
string.vector 互转 string 转 vector vector vcBuf;string stBuf("Hello DaMao!!!");----- ...
- std::vector与std::list效能对比(基于c++11)
测试对象类型不同,数量级不同时,表现具有差异: 测试数据对象为std::function时: test: times(1000)vector push_back time 469 usvector e ...
- 编程杂谈——std::vector与List<T>的性能比较
昨天在比较完C++中std::vector的两个方法的性能差异并留下记录后--编程杂谈--使用emplace_back取代push_back,今日尝试在C#中测试对应功能的性能. C#中对应std:: ...
- Item 21: 比起直接使用new优先使用std::make_unique和std::make_shared
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 让我们先从std::make_unique和std::make_s ...
- c++转载系列 std::vector模板库用法介绍
来源:http://blog.csdn.net/phoebin/article/details/3864590 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作 ...
- C++ 中的std::vector介绍(转)
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...
- std::vector介绍
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...
- std::array,std::vector,基于范围的for循环
std::array除了有传统数组支持随机访问.效率高.存储大小固定等特点外,还支持迭代器访问.获取容量.获得原始指针等高级功能.而且它还不会退化成指针T *给开发人员造成困惑. for( 元素名变量 ...
- std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义
std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义 这个容器保存了所有客户端连接的channel Channel2* Li ...
- 使用std::vector优化点云动画显示一例
1. 准备 使用std::vector应该知道几点: (1)内存连续的容器,有点像数组 (2)与std::list相比,插入和删除元素比较慢- 因为数据迁移 (3)添加元素可能会引发内存分配和数据迁移 ...
随机推荐
- 周末玩一下云技术,kvm 相关笔记
由于需要将企业的很贵的显卡和主机装在一个虚拟主机,用来跑 ue5 和 sd3 用来给用户临时使用,但是怎么将主机虚拟出来成多个主机呢,自己没有有钱请不起人,只能自己学一下虚拟化技术,第一步主机开启 ...
- 利用Elasticsearch实现地理位置、城市搜索服务
最近用到一些简单的地理位置查询接口,基于当前定位获取用户所在位置信息(省市区),然后基于该信息查询当前区域的......提供服务. 然后就自己研究了下GIS,作为一个程序员.自己能不能实现这个功能呢? ...
- PKUWC2024游记
PKUWC2024 游记 day -???? 得知今年冬令营在育才,非常高兴不用出远门了. day 1 当天上午 7:00 起来,然后做车去报道,非常堵车.感觉育才环境挺好的,~不像某人在读学校一样. ...
- 买卖股票相关算法-动态规划-python
要求1: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票.设计 ...
- 【Java】【常用类】Date 日期类
java.util.Date java.sql.Date 创建日期对象和打印结果 public class DateTest { public static void main(String[] ar ...
- 【C3】01 概述
CSS (层叠样式表) 让你可以创建好看的网页,但是它具体是怎么工作的呢? 这篇文章通过一些很简单的例子,告诉我们什么是 CSS, 同时还会涉及一些和 CSS 相关的专业术语. 预备知识: 基本的计算 ...
- 【SqlServer】02 SSMS工具基本使用入门
之前的安装中除了SqlServer,还有一个SSMS管理工具 数据库的访问依赖于工具 SSMS提供了两种登陆方式: 创建用户: 删除用户: 创建数据库: 删除数据库: 创建表: 设置表的字段,字段名称 ...
- ubuntu系统conda下运行pytorch报错:ImportError: libopenblas.so.0: cannot open shared object file
如题: ubuntu系统conda下运行pytorch报错:ImportError: libopenblas.so.0: cannot open shared object file 网上找了一些资料 ...
- 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 ...
- flex数据绑定
1 .方法绑定 [Bindable(event="myFlagChanged")] private function isEnabled():String { if (myF ...