Heim  >  Fragen und Antworten  >  Hauptteil

c++ - c+ stl set insert 返回值 如何获取bool类型?

按照我下面的写法, 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)) 也会报类型转换错误

官文文档显示这个函数有多种类型的返回值,要怎么理解?

PHP中文网PHP中文网2765 Tage vor765

Antworte allen(3)Ich werde antworten

  • PHP中文网

    PHP中文网2017-04-17 13:12:19

    我想题主调用的是这个版本的insert:

    std::pair<iterator,bool> insert( const value_type& value );

    看pair的文档,它是一个带着两个值的泛型容器。
    pair<T1, T2>有两个成员变量,first的类型是T1,second是T2。
    所以,要从pair<iterator,bool>里取出bool,只需要取出second就行了。

    cout << decrptS.insert(1).second;

    另外顺便提一下tuple。
    tuple是pair的一般化版本,可以装下n个值。

    std::tuple<int, double, bool, char*> t(1, 3.14, false, NULL);
    printf("%f\n", std::get<1>(t)); // 3.140000
    std::get<1>(t) = 2.72;
    printf("%f\n", std::get<1>(t)); // 2.720000

    (话说在这之前,我都不知道原来STL有返回pair的函数……)

    Antwort
    0
  • 高洛峰

    高洛峰2017-04-17 13:12:19

    你看手册, 他的insert返回了一个pair, first貌似是一个迭代器, 第二个是一个bool, 表示成功与否

    http://en.cppreference.com/w/cpp/container/set/insert

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-17 13:12:19

    if (decrptS.insert(1).second)

    Antwort
    0
  • StornierenAntwort