我刚刚注意到
std::map
和 std::set
有成员函数 equal_range
返回某个键的迭代器值范围。当映射和集合始终是有序键/值(如单个键对应单个值,或两者组合)容器时,这有什么意义。
我希望这个成员函数具有
std::multimap
和 std::multiset
,因为这两个函数都允许多个值共享相同的键,当然它们都这样做。我错过了什么?
与其他关联容器保持一致是有意义的。同样,
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
。