[英]Insert values from 2 maps<int, vector<char>> into 1 map<vector<char>, vector<char>>
我有
地圖<int,vector> x {1,a}{2,b}{3,c}
地圖<int,vector> y {1,x}{2,y}{3,z}
地圖<矢量,矢量> 新地圖
我想將 x.second 和 y.second 的值轉換為
新地圖<x.second, y.second>
我想得到 {a,x}{b,y}{c,z}
map<int, vector<char>>* phrasex;
map<int, vector<char>>* encodedx;
map<char, char>* mapCharacters = new map<char, char>;
auto it1 = encodedx->begin();
auto it2 = phrasex->begin();
while (it1 != encodedx->end())
{
auto t1 = it1->second.begin();
while (t1 != it1->second.end()) {
//i'm doing something wrong here
mapCharacters->insert({ {it1->second},{it2->second} });
//
}
++it1;
++it2;
}
這是使用std::transform
的解決方案:
std::transform(
std::begin(x), std::end(x), std::begin(y),
std::inserter(newMap, std::end(newMap)),
[](const auto& lhs, const auto& rhs) {
return std::make_pair(lhs.second, rhs.second);
});
請注意,由於 lambda function 中的自動參數,這需要 C++14。 在 C++11 中,您必須明確編寫std::pair<int, std::vector<char>>
類型。
嘗試這樣的事情:
typedef vector<char> vchar;
typedef map<int, vchar> map_vchar;
typedef map<vchar, vchar> map_vch;
typedef pair<int, vchar> pr_vchar;
int main() {
vchar vc1a(10, 'a');
vchar vc2a(10, 'b');
map_vchar m1 { {1, vc1a}, {2, vc2a} };
vchar vc1b(10, 'a');
vchar vc2b(10, 'b');
map_vchar m2 { {1, vc1b}, {1, vc2b} };
map_vch combined;
transform(m1.begin(), m1.end(), m2.begin(), inserter(combined, combined.end()),
[] (const pr_vchar& pr1, const pr_vchar& pr2) {
return pair<vchar, vchar>{pr1.second, pr2.second};
;}
);
return 0;
}
我不能確定,但似乎map<int, vector<char>>
的原始選擇可以更好地替換為vector<char>
,甚至可能是一個string
。
map<vector<char>, vector<char>>* mapCharacters = new map<vector<char>, vector<char>>;
map<int, vector<char>>* phrasex;
map<int, vector<char>>* encodedx;
for (map<int, vector<char>>::iterator i = encodedx->begin(), j = phrasex->begin(); i != encodedx->end(), j != phrasex->end(); ++i, ++j)
{
for (vector<char>::iterator x = i->second.begin(), y = j->second.begin(); x != i->second.end(), y != j->second.end(); ++x, ++y) {
mapCharacters->insert({ {*x},{*y} });
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.