如何初始化pair <vector <pair <bool,int>&gt;,vector <pair <bool,int>&gt;&gt;在C ++ 11中

时间:2016-12-11 18:29:00

标签: c++ vector

我想初始化:

pair<vector<pair<bool,int>>,vector<pair<bool,int>>> pvp;

所以i:

pvp.first[i].first = true;

pvp.second[i].first = false;

我知道您可以通过循环执行此操作,但是没有像initialization for a vector更快的方式吗?

3 个答案:

答案 0 :(得分:3)

抱歉,我没有直接回答这个问题,但我认为问题不是真正的问题。

通用数据结构很棒,但也许考虑几个类。这样,各个类构造函数可以根据需要处理初始化(以较小的部分)。

答案 1 :(得分:1)

初始化语法为:

pvp{ vector<pair<bool, int>>(5, { true, 0 }), vector<pair<bool, int>>(5, { false, 0 }) };

现在,你没有指定数组的任何长度(或整数应该是什么),但这是完整的方法:

#include <tuple>
#include <vector>
#include <iostream>

using namespace std;

int main(){

    pair<vector<pair<bool, int>>, vector<pair<bool, int>>> pvp{ vector<pair<bool, int>>(5, { true, 0 }), vector<pair<bool, int>>(5, { false, 0 }) };

    for (auto i : pvp.first){
        cout << (i.first ? "true" : "false") << '\n';
    }
    for (auto i : pvp.second){
        cout << (i.first ? "true" : "false") << '\n';
    }

    return 0;
}

输出:

 true
 true
 true
 true
 true
 false
 false
 false
 false
 false

如前所述,这种实现过于复杂,无法让简单的人类读者理解。但是,将它分成小块。

答案 2 :(得分:1)

考虑使用typedef使代码更容易阅读。

using MyPair = pair<bool,int>;
using MyPairs = vector<MyPair>;
pair<MyPairs,MyPairs> pvp{MyPairs{make_pair(true,10)},
                          MyPairs{make_pair(false,11)}};