std::vector 和 std::map 都支持以下比较运算符

news/2024/9/23 12:10:04

在 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 中的类型(如元素、键和值)支持相应的比较运算符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63716.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

2024ICPC网络赛第二场题解(部分)

2024ICPC网络赛第二场题解前言 这场相对作用大一点,最后顶着队友的怀疑压力乱搞出了C,但是后面看题解发现似乎是数据弱了跑过去,其实复杂度是队友分析的那样,是不正确的,但是毕竟是打名额的比赛,过了就是过了,这里分享一下C题的乱搞做法,以及其他题的我们队赛时代码。下…

20240814

Sternhalma 我们给格子编个号,然后暴力打表出一个格子可以走到哪些点,然后状压 \(dp\),从全 \(1\) 的情况开始倒推,每次查询将其转化为二进制数列即可 #include <bits/stdc++.h>using namespace std;using pii = pair<int, int>;const int N = 21, M = (1 <<…

学习vue——自定义指令

一、局部自定义指令二、全局注册自定义指令 三、总结

如何让带参数变量的mysql查询走索引?

1,问题的提出 mysql 5.7的数据库,jx_performance表含索引idx_performance。该索引关联两个字段:`date`, `user_id`。 在运行sql语句时发现,如果where条件采用参数变量,则查询不走索引。图1,带参数变量查询图2,采用字符串常数查询上图1和图2,实际上查询条件一样,因为查…

大发明家

(彩蛋:大样例是从数据里扒的,且没有绑点)。 由于组题人电脑坏了,所以只能写简略题解了(其实是组题人的口胡碎碎念),写的不清晰的和部分分可以听讲题(可能有一些地方我下意识省略了,可以来问我). 首先,生成到完美的时间线的概率是固定的,如果我们假设概率为 \[p = \frac{|完…

acme+cloudflare生成免费证书(自动续期)

acme DNSapi acme DNSapi的作用是在申请证书时使用dns交易,acme可以通过dnsapi在对应的dns管理平台提交对应的dns记录。玩过证书的朋友都知道,证书申请时有三种验证方式邮箱验证:需要邮箱与域名绑定(细节要求我没试过) 文件验证:文件验证时证书管理方会要求你在服务器的指…

pip install volcengine-python-sdk[ark]

解决方案: 需要修改注册表的变量 https://github.com/volcengine/volcengine-python-sdk/issues/5

python面试题

python是什么?Python是一种开放原始码、直译式、可携式、面向对象的程序语言,具有模块、多线程、异常处理以及自动内存管理功能。广泛应用包括Web开发(如Django和Flask框架)、数据科学(如Pandas和NumPy库)、机器学习(如TensorFlow和PyTorch框架)、自动化脚本、科学计算…