2

私は C++ を使用しており、互いに関連する 2 つのベクトルがあります。

vector<double> val = {.3,.5,.2,.4};
vector<string> str = {'a','b','c','d'};

val で最大値を検索し、同じ位置の str から文字列を返したいと思います。

vector<double>::const_iterator it;
it = max_element(val.begin(), val.end());

では、どのようitに内部strを使用して手紙を取得できますか?

string lettter;
letter = str.at(it-> ????? );

感謝!!!

4

4 に答える 4

4

どうですか

letter = str.at(it - val.begin());

?

(根拠)

于 2013-02-05T20:05:21.123 に答える
3

itの先頭からの距離を調べてval、それを使用してインデックスを作成できますstr

str[std::distance(std::begin(val), it)]

を使用して、 のタイプをイテレータがランダム アクセスを提供しないコンテナにstd::distance変更しても、これは機能します。valただし、ランダム アクセス イテレータで使用すると、一定の時間計算量が得られます。を使用すると、必要に応じて C スタイルの配列std::beginに変更できます。val

次のように初期化する必要があることに注意してくださいstr

vector<string> str = {"a","b","c","d"};

std::stringを受け取るコンストラクタはありませんchar

于 2013-02-05T20:05:16.087 に答える
2

次のように要素のインデックスを取得します。

auto index = std::distance(val.begin(), it);

次に、文字列配列にインデックスを付けます。

auto letter = str[index];

これらの値が相関している場合は、おそらくそれらを強制的にまとめておく必要があることに注意してください。

typedef std::pair<double, string> valstr_pair;
std::vector<valstr_pair> valstr;

auto it = std::max_element(valstr.begin(), valstr.end(),
    [](const valstr_pair& first, const valstr_pair& second)
    {
        return first.first < second.first; // compare values
    });

it->first;  // max value
it->second; // string of max value
于 2013-02-05T20:05:08.130 に答える
2

max_element()これにより、返されたイテレータとベクトルの先頭との間の距離が得られます。

std::distance(val.begin(), it).

これを へのインデックスとして使用できますstr

于 2013-02-05T20:05:19.550 に答える