マップのキーをベクトルのインデックスにマップする関数key_to_index
があるとします。例を挙げてみましょう。キーからインデックスへのマッピングが与えられたマップからベクトルへの値(mapped_type)のコピー
std::map<int, int> source = {{1,55}, {4, 20}, {6, 25}};
std::vector<int> target;
int key_to_index(int key) {return key;}
STLアルゴリズムを使用する次のループのバージョンは?とにかく
std::vector<int> target;
target.resize(transformed.rbegin()->first + 1);
std::for_each(std::cbegin(transformed), std::cend(transformed),
[&target](const auto& e) {
target[e.first] = e.second;
}
);
:ターゲットを
std::map<int, int> transformed;
std::transform(std::cbegin(source), std::cend(source),
std::inserter(transformed, transformed.end()),
[](const auto& e) {
return std::make_pair(key_to_index(e.first), e.second);
}
);
をそして埋める:
for (const auto &el: source) {
int index = key_to_index(el.first);
if (index > (int)target.size() - 1) target.resize(index + 1);
target[index] = el.second;
}
'key_to_index()'関数は本当に 'key'と' index'を返すはずですか? – Galik
@Galik OPは、デモンテーションの目的で自明のアイデンティティ機能を作ったと言っていました。実際の実装は重要ではありません。 –
あなたは 'std :: transform'にラップしてラムダを使うことができますが、それ以外のところはそのまま残しておきます。 – DeiDei