您的位置:首页 > 大数据 > 人工智能

对std::vector<make_pair>中重复元素的删除

2011-11-23 22:06 471 查看
方法1:

vector删除重复元素

主要思路为,先排序,再唯一,然后删除最后面的那段重复代码。

举例:有这样一个vector

int a[10] = {1,3,6,4,7,2,3,4,8,9};  // 1,2,3,3,4,4,6,7,8,9

vector<int> ivec(a, a+10);

①首先将vector排序

sort( vecSrc.begin(), vecSrc.end() ); // 1,2,3,3,4,4,6,7,8,9

②然后使用unique算法,unique返回值是重复元素的开始位置。

vector<int>::iter pos;

pos = unique(ivec.begin, ivec.end()); //1,2,3,4,6,7,8,9,3,4

               //      ^

③最后删除后面的那段重复部分

earse(pos, ivec.end()); //1,2,3,4,6,7,8,9

如果vector中存储的元素是自定义的结构或者是类,那么就需要重载操作符。根据类的某一个成员变量排序或者比较。

sort算法需要重载"<"操作符。unique算法需要重载"=="操作符。

操作符重载的示例如下:

class CTest

……

public:

BOOL operator<( const CTest& oCompany ) const

{

return this->m_nCompanyId < oCompany.m_nCompanyId;

}

BOOL operator==( const CECompany& oCompany ) const

{

return this->m_nCompanyId == oCompany.m_nCompanyId;

}

}

以上部分为转载http://blog.csdn.net/nowen/article/details/5509525的一部分。

----------------------------------------------------------------------------------------------------------------------------分割线

以下最重要的部分来了:

其实就是几句话:

使用map效果会简单的多,因为std::map 本身就是一一对应的,如果说有重复的部分,将这些元素放进去之后就自动将重复元素过滤了。

具体代码实现:

已知:std::vector<make_pair<string,string>> vec_pair;

——————————————————————————————

std::vector<make_pair>::iterator iter = vec_pair.begin();

std::map<string,string> map_str;

for(;iter = vec_pair.end();iter++)

{

string str1 = iter.first();

if(map_str[str]]==Null)

{

map_str.insert(std::make_pair(iter .first(),iter .second()));

}

}

___________________________________________________

接下来map_str里面的元素就没有重复的了,完成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐