在C++中对一个向量的向量使用"unique()"函数

4

我希望这不是一个重复的问题,但如果是的话,请随意指出正确的方向。

我有一个 vector<vector<int> >

是否可以在此上使用unique()?类似这样:

vector<vector<int> > myvec;
//blah blah do something to myvec
vector<vector<int> >::interator it = unique(myvec.begin(), myvec.end());
< p > < code > myvec.begin() 到 < code > it 的范围是否唯一?


当然,这将产生一系列独特的 vector<int>,而不是一系列独特的 int - MSalters
是的,我想要一系列独特的 vector<int>。要获取一系列独特的 int,我可以在每个内部向量上使用 unique,这样就可以正常工作了。 - Sagar
2个回答

6

只要你的向量已经排序,就可以使用。有关详细信息,请参阅 unique() STL 文档。

以下是使用示例:

#include <vector>
#include <string>
#include <algorithm>
#include <string>
#include <iostream>

using namespace std;

int main ()
{
    vector< vector<string> > v;

    v.push_back (vector<string> ());
    v.back ().push_back ("A");

    v.push_back (vector<string> ());
    v.back ().push_back ("A");

    v.push_back (vector<string> ());
    v.back ().push_back ("B");

    for (vector< vector<string> >::iterator it = v.begin (); it != v.end (); ++it)
        for (vector<string>::iterator j = it->begin (), j_end = it->end (); j != j_end; ++j)
            cout << *j << endl;

    cout << "-------" << endl;

    vector< vector<string> >::iterator new_end = unique (v.begin (), v.end ());
    for (vector< vector<string> >::iterator it = v.begin (); it != new_end; ++it)
        for (vector<string>::iterator j = it->begin (), j_end = it->end (); j != j_end; ++j)
            cout << *j << endl;
}

3

看起来应该可以工作——它会在两个vector<int>对象上调用==运算符,所以应该可以工作。

请注意,该运算符适用于重复组,因此如果您的重复项尚未分组,则可能需要对外部向量进行排序。

参考:http://www.sgi.com/tech/stl/unique.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接