在 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'