C++ STL中在set或multiset中查找元素

C++ STL中在set或multiset中查找元素

诸如 set、 multiset、 map 和 multimap 等关联容器都提供了成员函数 find( ),它让您能够根据给定的
键来查找值:

auto elementFound = setInts.find (-1);
// Check if found...
if (elementFound != setInts.end ())
cout << "Element " << *elementFound << " found!" << endl;
else
cout << "Element not found in set!" << endl;

在 C++ 语言的 STL 标准模板库 , std::set 集合容器 是一个存储唯一元素的容器 , 该容器的底层使用 红黑树 数据结构 实现 ; std::set 容器是有序的 , 存储元素时 会自动按指定规则进行排序 ;

std::set 集合容器类 提供了一个 find 成员函数 , 用于查找 集合容器中 指定值的元素 ;

std::set#find() 函数原型 如下 :

iterator find(const key_type& k) const;
参数解析 :
元素类型 : 参数类型 key_type 是 std::set 集合容器 元素类型 ;
引用类型 : 为了避免二次拷贝 , 使用该元素类型的 引用类型 key_type& 作为参数类型 ;
返回值解析 :
找到指定元素 : 该 find 函数返回一个迭代器 , 该 迭代器指向找到的元素 ;
没有找到元素 : 如果在 std::set 集合容器中 , 没有找到指定元素 , 则返回 指向集合末尾的迭代器 , 即 std::set::end() 迭代器 , 该迭代器不指向任何元素 , 指向最后一个元素的后一个位置 ;

程序清单 19.3 演示了 find( )的用法。 multiset 可包含多个值相同的元素,因此对于 multiset,这个
函数查找第一个与给定键匹配的元素。

0: #include <set>
1: #include <iostream>
2: using namespace std;
3:
4: int main ()
5: {
6: set<int> setInts{ 43, 78, -1, 124 };
7:
8: // Display contents of the set to the screen
9: for (auto element = setInts.cbegin();
10: element != setInts.cend ();
11: ++ element )
12: cout << *element << endl;
13:
14: // Try finding an element
15: auto elementFound = setInts.find (-1);
16:
17: // Check if found...
18: if (elementFound != setInts.end ())
19: cout << "Element " << *elementFound << " found!" << endl;
20: else
21: cout << "Element not found in set!" << endl;
22:
23: // finding another
24: auto anotherFind = setInts.find (12345);
25:
26: // Check if found...
27: if (anotherFind != setInts.end ())
28: cout << "Element " << *anotherFind << " found!" << endl;
29: else
30: cout << "Element 12345 not found in set!" << endl;
31:
32: return 0;
33: }

输出:
-1
43
78
124
Element -1 found!
Element 12345 not found in set!
分析:
第 15~21 行演示了成员函数 find( )的用法。第 18 行将 find( )返回的迭代器与 end( )进行比较,以
核实是否找到了指定的元素。如果该迭代器有效,便可使用*elementFound 访问它指向的值。

程序清单 19.3 所示的示例也适用于 multiset,只需将第 6 行的 set 替换为 multiset 即可,
这不会影响应用程序。鉴于 multiset 可能在相邻的位置存储多个值相同的元素,为了访
问所有这些元素,可使用 find()返回的迭代器,并将迭代器前移 count()-1 次。成员函数
count()在程序清单 19.2 中演示过。
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值