std::map/std::set 和 equal_range,这里的推理是什么?

问题描述 投票:0回答:1

我刚刚注意到

std::map
std::set
有成员函数
equal_range
返回某个键的迭代器值范围。当映射和集合始终是有序键/值(如单个键对应单个值,或两者组合)容器时,这有什么意义。

我希望这个成员函数具有

std::multimap
std::multiset
,因为这两个函数都允许多个值共享相同的键,当然它们都这样做。我错过了什么?

c++ stl
1个回答
0
投票

与其他关联容器保持一致是有意义的。同样,

std::map
有一个
count
方法,尽管它只能返回
0
1
并且
find
已经完成了这项工作。您可以将
count
与关联容器一起使用,无论它们是否可以包含超过 1 个元素。同样,您可以将
equal_range
用于
std::unordered_map
,就像您可以将其用于有序
std::map
一样。你是对的,对于
std:map
std::set
这些很少有用,但假设你编写接受关联容器(有序或无序)的通用代码:

template <typename T,typename E>
void foo(T& t,E e) {
     auto p = t.equal_range(e);
     //...
}

没有正式要求所有关联容器都必须具有

equal_range
,但从 c++20 开始,您可以编写一个概念,要求
T
必须具有
equal_range
并使用模板
foo
也与
std::map

© www.soinside.com 2019 - 2024. All rights reserved.