0

在 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没有找到,但它返回一个pair元素的迭代器16, 16?!
4

1 回答 1

1

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

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

Returns a range containing all elements with the given key in the container. The range is defined by two iterators, one pointing to the first element that is not less than key and another pointing to the first element greater than key. Alternatively, the first iterator may be obtained with lower_bound(), and the second with upper_bound().

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

于 2019-10-07T00:47:06.097 回答