簡體   English   中英

從 2 個地圖中插入值<int, vector<char> &gt; 入 1 map <vector<char> , 向量<char> &gt; </char></vector<char></int,>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM