关联容器的 C++ 入门 5ed equal_range

标签 c++ equal-range

在 C++ prime 5 Ed 第 11 章中。关联容器。 “表 11.7。在关联容器中查找元素的操作”:

据说:“c.equal_range(k) 返回一对迭代器,表示具有键 k 的元素。如果 k 不存在,则两个成员都是 c.end()。”

set<int> si{ 5, 7, 23, 16, 81, 24, 10};
auto it = si.equal_range(13);
cout << *it.first << " " << *it.second << endl; // 16 16
  • 但正如您在上面看到的那样,13 未找到,但它返回元素16、16 迭代器?!<

最佳答案

运行这个程序,它按预期工作:它返回结束迭代器。

int main (int argc, char** argv) {
    std::set<int> si{ 5, 7, 23, 16, 81, 24, 10};
    auto it = si.equal_range(99);

    if(it.first == std::end(si)) {
        std::cout << "Element not found." << std::endl;
    }
    else {
        std::cout << *it.first << ", " << *it.second << std::endl;
    }

    return 0;
}

但是,如果我要检查 13,我会返回 16, 16

根据 cppreference.com

返回一个范围,其中包含容器中具有给定键的所有元素。范围由两个迭代器定义,一个指向第一个不小于 key 的元素,另一个指向第一个大于 key 的元素。或者,第一个迭代器可以用 lower_bound() 获得,第二个迭代器用 upper_bound() 获得。

16 恰好是您示例中第一个不小于且大于 13 的元素。

关于关联容器的 C++ 入门 5ed equal_range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262249/

相关文章:

C++: myfile.open ("example.txt") 行:找不到文件?

c++ - equal_range 和 2 重载没有对 'this' 指针的合法转换

c++ - 查找具有前缀字符串的容器的相等范围

c++ - 为什么不调用虚拟基础非默认构造函数,除非大多数派生基础显式调用它们?

c++ - 如何在 multimap 中按排序顺序打印键的值

c++ - 查找 vs equal_range 和性能

c++ - BSD套接字连接时参数无效

c++ - WM_KEYDOWN - 捕获导致事件的按键

c++ - 返回从常量指针 vector 生成的指针的函数