0

私は次のものを持っています:

typedef std::map<int, std::map<std::string, std::string> > ComplexMap;
ComplexMap map_a;
ComplexMap map_b;

map_a 全体を map_b にスワップしたい。次の 2 つのオプションに機能上の違いはありますか。

// 1

ComplexMap::iterator end = map_a.end;
for (ComplexMap::iterator it = map_a.begin(); it != end; ++it)
{
    mam_b[it->first].swap(it->second);
}

// 2

map_b.swap(map_a);
4

2 に答える 2

6

最初のバージョンは線形の複雑さ ( O(N) ) を持ち、同じキーを持たない限り、マップの要素を正しく交換しません。

2 つ目は一定の複雑さ ( O(1) ) を持ち、マップの要素を正しく交換します。あなたは2番目を好むべきです。

于 2013-10-08T09:44:36.017 に答える
0

map.swap は、コンテンツ全体を反復して移動するのではなく、コンテンツ全体を一度に交換するため、2 番目のオプションは最初のオプションよりも効率的です。また、最初のオプションは理解するのが本当に混乱します。

これが役に立てば幸いです、ラズヴァン。

于 2013-10-08T09:45:22.283 に答える