按照我下面的写法, cout << (bool)decrptS.insert(1);出编译报错!
#include<queue>
#include<string.h>
#include <set>
using namespace std;
typedef set<int> Set;
int main()
{
Set decrptS;
cout << (bool)decrptS.insert(1);
// cout << decrptS.insert(2);
// cout << decrptS.insert(3);
// cout << decrptS.insert(1);
decrptS.erase(decrptS.begin());
decrptS.erase(decrptS.begin());
decrptS.erase(decrptS.begin());
decrptS.erase(decrptS.begin());
return 0;
}
if(decrptS.insert(1)) 也会报类型转换错误
官文文档显示这个函数有多种类型的返回值,要怎么理解?
我想题主调用的是这个版本的insert:
看pair的文档,它是一个带着两个值的泛型容器。
pair<T1, T2>有两个成员变量,first的类型是T1,second是T2。
所以,要从pair<iterator,bool>里取出bool,只需要取出second就行了。
另外顺便提一下tuple。
tuple是pair的一般化版本,可以装下n个值。
(话说在这之前,我都不知道原来STL有返回pair的函数……)
你看手册, 他的insert返回了一个pair, first貌似是一个迭代器, 第二个是一个bool, 表示成功与否
http://en.cppreference.com/w/cpp/container/set/insert
if (decrptS.insert(1).second)