gpt4 book ai didi

c++ - C++ STL 中的 find() 用法

转载 作者:行者123 更新时间:2023-11-30 01:54:50 24 4
gpt4 key购买 nike

我一直在实现 C++ STL set<>我在使用 find() 时遇到问题功能。

下面是我的set<>键入以便我可以存储三个整数 a、b、c。

set<pair<int,pair<int,int> > > myset; 

1) 如何使用find()在其中。“我是否需要像在 sort() 中那样传递我自己的比较器函数”。

2) set<> 又如何?保持集合的唯一性。我的意思是我想要包含

的集合

{ {1,2,3}; {2,3,4} ; {2,3,1} }如果我插入元素:-

{1,2,3}

{2,3,4}

{1,2,3}

{2,3,1}

最佳答案

你能用一个元组代替一对 吗? (见答案结尾)

如果你不能(因为你没有使用 C++11),要将 find 与你的对一起使用,你不需要你的比较器:

typedef pair<int,pair<int,int>>  my_type;
typedef set<my_type> set_of_mytype;
set_of_mytype myset;
myset.insert(make_pair(1,make_pair(3,4)));


set_of_mytype::iterator search1 = myset.find(make_pair(1,make_pair(5,4)));
set_of_mytype::iterator search2 = myset.find(make_pair(1,make_pair(3,4)));


if(search1 != myset.end())
cout << "search 1: (1,(5,4)) found !" << endl;
if(search2 != myset.end())
cout << "search 2: (1,(3,4)) found !" << endl;

cout << " Size of the set with only (1,(3,4)) in it : "<< myset.size() << endl;
myset.insert(make_pair(3,make_pair(1,4)));
cout << " Size of the set with only (1,(3,4)) and (3,(1,4)) in it : "<< myset.size() << endl;

将输出:

search 2: (1,(3,4)) found !

Size of the set with only (1,(3,4)) in it : 1

Size of the set with only (1,(3,4)) and (3,(1,4)) in it : 2

所以对于你的第一个问题:没有自定义比较器它就可以工作。

对于第二个,如果你再次尝试插入:

myset.insert(make_pair(1,make_pair(3,4))); 
cout << " Size of the set is still : "<< myset.size() << endl;

输出是

Size of the set is still : 2

所以“区别性”会出现在这里。


如果您使用 C++11 进行编译,则可以使用元组:

 typedef tuple <int,int,int> my_type2;
typedef set<my_type2> set_of_tuples;
set_of_tuples myset2;
myset2.insert(make_tuple(1,3,4));

您的代码会更简单:编写 make_tuple(1,3,4) 比 make_pair(1,make_pair(3,4)) 更容易。再加上用这个访问元素会更容易:

set_of_tuples::iterator it = my_set.find( make_tuple(1,3,4) )
my_type2 my_element = *it
cout << get<0>(my_element) << "," << get<1>(my_element) << "," get<2>(my_element) << endl;

关于c++ - C++ STL 中的 find() 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21502487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com