在 set 和 multiset 中搜索值

有几种方法可以在 std::setstd::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'