Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化静态常量std::pair<;字符串,向量<;字符串>&燃气轮机;_C++_Initialization_Stdvector_Composite_Std Pair - Fatal编程技术网

C++ 初始化静态常量std::pair<;字符串,向量<;字符串>&燃气轮机;

C++ 初始化静态常量std::pair<;字符串,向量<;字符串>&燃气轮机;,c++,initialization,stdvector,composite,std-pair,C++,Initialization,Stdvector,Composite,Std Pair,我有一个 class myclass { // ... static const vector<pair<string,vector<string>>> var; // ... }; 如果有一种方法可以在第一种方法中实现,那么语法是什么? 我已经搜索过了,但没有找到进行复合std::pair初始化的语法。例如,您可以使用 vector <string>myvec={"elem1", "elem2","elem3"}; v

我有一个

class myclass
{
    // ...
    static const vector<pair<string,vector<string>>> var;
    // ...
};
如果有一种方法可以在第一种方法中实现,那么语法是什么?
我已经搜索过了,但没有找到进行复合std::pair初始化的语法。例如,您可以使用

vector <string>myvec={"elem1", "elem2","elem3"};
vector myvec={“elem1”、“elem2”、“elem3”};
但是如何初始化复杂的
向量

谢谢。

一如既往地简单-只需使用初始值设定项列表和隐式转换在逻辑上嵌套每个实体。例如,我使用了您的代码,并制作了以下示例:

class A {
    static const std::vector<std::pair<std::string, std::vector<std::string>>> var;
};

const std::vector<std::pair<std::string, std::vector<std::string>>> A::var = {
    {"abc", {"def", "ghj"}}
};

您需要嵌套初始化

const std::vector<std::pair<std::string,std::vector<std::string>>> Foo::var = 
{ // start of vector
    { "pair1", {"one", "two"}},
    { "pair2", {"three", "four"}},
    { "pair3", {"five", "six"}}
};// end of vector

这已经被问了很多次了。你没有搜索吗?是的,有。为什么不利用它呢?我已经搜索了可能的重复,但没有找到进行复合std::pair初始化的语法。例如,可以使用
vector myvec={“elem1”、“elem2”、“elem3}初始化向量,但是如何初始化复杂的
向量
?将使用此注释更新原始帖子。@npit大括号初始化可以嵌套。试试像这样的
{“pair1”、{“element11”、“element12”}、{“pair2”、{“element21”、“element22”}}
谢谢你,维克托,这正是我需要的。
class A {
    static const std::vector<std::pair<std::string, std::vector<std::string>>> var;
};

const std::vector<std::pair<std::string, std::vector<std::string>>> A::var = {
    {"abc", {"def", "ghj"}}
};
std::vector<std::pair<std::string, std::vector<std::string>>>
     ^      ^         ^            ^           ^        ^
     |      |         |            |           |        |

     {      {         "abc"        {           "abc", "def"  }  }   }

     |      |                      |                         |  |   |
     |      |                      |--------vector-----------|  |   |
     |      |--------------------------pair---------------------|   |
     |---------------------------vector-----------------------------|
const std::vector<std::pair<std::string,std::vector<std::string>>> Foo::var = 
{ // start of vector
    { "pair1", {"one", "two"}},
    { "pair2", {"three", "four"}},
    { "pair3", {"five", "six"}}
};// end of vector
class Foo  // this would be in the .h file
{
public:
    static const std::vector<std::pair<std::string,std::vector<std::string>>> var;
};

// this part would be in the .cpp file
const std::vector<std::pair<std::string,std::vector<std::string>>> Foo::var = 
{ // start of vector
    { "pair1", {"one", "two"}},
    { "pair2", {"three", "four"}},
    { "pair3", {"five", "six"}}
};// end of vector

int main()
{
    for (const auto & p : Foo::var)
    {
        std::cout << p.first << "\t";
        for (const auto & e : p.second)
        {
            std::cout << e << "\t";
        }
        std::cout << std::endl;
    }
    return 0;
}
pair1   one two 
pair2   three   four    
pair3   five    six