在 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
。
返回一个范围,其中包含容器中具有给定键的所有元素。范围由两个迭代器定义,一个指向第一个不小于 key 的元素,另一个指向第一个大于 key 的元素。或者,第一个迭代器可以用 lower_bound() 获得,第二个迭代器用 upper_bound() 获得。
16 恰好是您示例中第一个不小于且大于 13 的元素。
关于关联容器的 C++ 入门 5ed equal_range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262249/