在 set 和 multiset 中搜索值
有几种方法可以在 std::set
或 std::multiset
中搜索给定值:
要获取第一次出现的键的迭代器,可以使用 find()
函数。如果密钥不存在,则返回 end()
。
std::set<int> sut;
sut.insert(10);
sut.insert(15);
sut.insert(22);
sut.insert(3); // contains 3, 10, 15, 22
auto itS = sut.find(10); // the value is found, so *itS == 10
itS = sut.find(555); // the value is not found, so itS == sut.end()
std::multiset<int> msut;
sut.insert(10);
sut.insert(15);
sut.insert(22);
sut.insert(15);
sut.insert(3); // contains 3, 10, 15, 15, 22
auto itMS = msut.find(10);
另一种方法是使用 count()
函数,它计算在 set
/ multiset
中找到了多少相应的值(在 set
的情况下,返回值只能是 0 或 1)。使用与上面相同的值,我们将:
int result = sut.count(10); // result == 1
result = sut.count(555); // result == 0
result = msut.count(10); // result == 1
result = msut.count(15); // result == 2
在 std::multiset
的情况下,可能有几个元素具有相同的值。要获得此范围,可以使用 equal_range()
功能。它返回具有迭代器下限(包括)和上限(不包括)的 std::pair
。如果密钥不存在,则两个迭代器都将指向最接近的上级值(基于用于对给定 multiset
进行排序的比较方法)。
auto eqr = msut.equal_range(15);
auto st = eqr.first; // point to first element '15'
auto en = eqr.second; // point to element '22'
eqr = msut.equal_range(9); // both eqr.first and eqr.second point to element '10'