1

C ++の問題の解決策がありますが、これを書いていることに気づきました:

dosomething(1,"value1");
dosomething(2,"somethingelse");
dosomething(3,"notthesame");
dosomething(7,"wahetevr");
dosomething(5,"yeah");

正常に動作しますが、かなり長いです...そして長くなります。ただし、2 つの値のセットはコンパイル時のみです。

Python では、リスト内の 2 つの値のタプルを作成し、それらを単に foreach します。2 つの値の軽量異種配列を作成する方法はありますか? これまでゼロにしていたライブラリを保持しているため、型を作成してそれらをスローすることを避け、ライブラリの使用を避けようとしています。

2 つの値セットの 2 つの配列を作成したくありません。同期を外すのは簡単すぎます。

提案をありがとう。

4

4 に答える 4

3

それはあなたのコンパイラに依存します。最新のコンパイラを使用している場合は、C++ 11tuple型を使用できます。例えば:

std::vector<std::tuple<int, std::string>> tuples = 
    { 
        std::make_tuple(1, "value1"), 
        std::make_tuple(2, "somethingelse"), 
        ... 
    };

for(auto item : tuples)
    dosomething(get<0>(item), get<1>(item));

コンパイラがタプルまたは範囲ベースをサポートしていない場合は、ブースト タプルと BOOST_FOREACH を使用できます。彼らは似たようなインターフェースを持っています、それをグーグルで検索してください:)

アレックス。

于 2013-02-17T08:05:23.067 に答える
1

dictPythonのsのように、コアC++言語には異種または連想配列リテラルはありません

キーと値のペアの保存と取得は、C++でのマップの仕事です。std::mapは標準ライブラリの一部であり、すべての標準準拠コンパイラに含まれているため、見逃してはなりません。

#include <iostream>
#include <map>
#include <string>

int main()
{   
    // Typedefs make code more readable:
    typedef std::map<int, std::string> lookup_t;

    // Create map:
    lookup_t lookup;

    // Insert information:
    lookup[1] = "value1";
    lookup[2] = "somethingelse";
    lookup[3] = "notthesame";
    lookup[7] = "wahetevr";
    lookup[5] = "yeah";

    // Random access:
    std::cout << "3 -> " << lookup[3] << std::endl;

    // Sequential access:
    for (lookup_t::iterator i = lookup.begin(), end = lookup.end(); i != end; ++i)
    {   
        std::cout << i->first // key
            << " -> "
            << i->second // value
            << std::endl;
    }
}

同様の構造は、Qtなどの他のサードパーティライブラリ、 QMapBoost.Containerのさまざまなマップ、およびMicrosoftなどの移植性の低いライブラリにも存在しますCMap

効率と移植性の観点から、別のアプローチをとるやむを得ない理由がない限り、私は標準マップを選びます。

于 2013-02-17T08:26:47.897 に答える
1

それがstd::mapの目的です。基本的には連想配列です。

于 2013-02-17T08:07:04.427 に答える
0

boostタプルライブラリを使用するだけです

ここにドキュメントがあります:http://www.boost.org/doc/libs/1_37_0/libs/tuple/doc/tuple_users_guide.html

編集:

また、http://www.cplusplus.com/reference/tuple/tuple/があります

于 2013-02-17T08:01:28.717 に答える