STL多图关联容器

时间:2012-08-14 00:20:43

标签: c++ visual-c++

有谁知道如何创建两个多图关联容器。第一个会有重复的键。然后我想发布算法来搜索所有重复项并将它们移动到第二个容器,并可能删除第一个容器中的原始副本。

即。 :

typedef multimap< int, int, less< int > > mma;
mma contain1;

typedef multimap< int, less< int > > ne;
ne contain2;

cointain1.insert(mma::value_tpe(5, 2);
cointain1.insert(mma::value_tpe(5, 3);
cointain1.insert(mma::value_tpe(5, 3);
cointain1.insert(mma::value_tpe(6, 2);

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

了解multi_map::lower_boundmulti_map::upper_bound。它们将为您提供一对迭代器,这些迭代器定义一系列与参数相等的值。如果序列的长度大于1,则表示您有重复项。

答案 1 :(得分:0)

我建议您迭代第一个多图,查找重复项。当您找到它们时,将它们移动到第二个多图。

typedef multimap<int, int> mma;
mma contain1;
mma contain2;

contain1.insert(mma::value_type(5, 2);
contain1.insert(mma::value_type(5, 3);
contain1.insert(mma::value_type(5, 3);
contain1.insert(mma::value_type(6, 2); 

int previous;

for (mma::iterator i = contain1.begin(); i != contain1.end(); )
    if (i != contain1.begin() && i->first == previous)
    {
        contain2[i->first] = i->second;

        // "maybe delete the original duplicates in the first container"...
        contain1.erase(i++);
    }
    else
    {
        previous = i->first;
        ++i;
    }