0

タプルを保持するベクターを作成しようとしています

これは私のコードです:

std::vector<std::tuple<std::vector<std::tuple<std::string,int,int>>> vec;
...
...
for (i = 0; i < 5; i++) {
    vec.push_back(std::tuple<std::vector<std::tuple<std::string,int,int>>());
    for(int j=0;j<5;j++) {
        std::get<0>(vec[i]).push_back(std::tuple<std::string,int,int>());
        std::get<0>(std::get<0>(vec[i]))[j] = value; //error
        std::get<1>(std::get<0>(vec[i]))[j] = value1;
    }

エラー:

no matching function for call to 'get(std::vector<std::tuple<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, int> >&)'*

それの何が問題なのですか?ありがとう。

4

1 に答える 1

4

これはコードの作業バージョンです

std::vector<std::tuple<std::vector<std::tuple<std::string,int,int>>>> vec;
for (int i = 0; i < 5; i++) {
    vec.push_back(std::tuple<std::vector<std::tuple<std::string,int,int>>>());
    for(int j=0;j<5;j++) {
        std::get<0>(vec[i]).push_back(std::tuple<std::string,int,int>());
        std::get<0>(std::get<0>(vec[i])[j]) = "str";
        std::get<1>(std::get<0>(vec[i])[j]) = 1;
    }
}

http://coliru.stacked-crooked.com/a/0cdc4531904a56b3

いくつかの欠落が>あり、割り当てステートメントを完全に台無しにしました。

私の提案: このようなデータ構造を作成しないでください。複雑なデータ構造が必要な場合は、実際の構造体/クラスを作成してください。それらに意味のある名前を付けます。これにより、コードがより読みやすく、保守しやすくなります。

例えば

struct Record {
    std::string name;
    int value;
    int otherValue;
};

それ以外の

std::tuple<std::string,int,int>

また、タプルには単一の要素しか含まれていませんが、ここではあまり意味がありません。

于 2015-09-22T02:34:31.767 に答える