作者hwakeye (好可爱?)
看板C_and_CPP
标题Re: [问题] 关於STL的set
时间Wed Jul 22 17:02:46 2009
※ 引述《timTan (用口头禅区分年记)》之铭言:
: ※ 引述《stockyo (就做吧)》之铭言:
: : 请问一下
: : 若我需要储存的资料字串为 "book" "apple" "apple" "cat"
: : 但我想要过滤掉apple重覆一次,也就是储存一次就好
: : 我发现set可以达到我的要求
: : 可是,我又想要顺序不乱,也就是按照我的输入
: : 变成 "book" "apple" "cat"
: : 但...set却会自己排好序
: : 请问有什麽方法可以两全其美吗?
: set , vector 并用
: 使用 set 来检查重复性
: 使用 vector 来储存资料,维持你插入的顺序
1F:推 stockyo:请问如何用set只检查重复性呢?07/22 16:26
2F:推 Ebergies:if( yourSet.find( blah...)!= ...) yourVector.push_...07/22 16:47
也可以试试检查set insert後的回传值
set在insert之後回传的pair中
first是安插後的element位址
second则是insert动作是否成功
印象中如果有重复值的话
second的部份应该是会回传false
所以程式就可以用下面的写法
std::set<int> c;
std::vector<int> d;
...
if (c.insert(1).second) {
d.insert(1);
}
...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.120.14.67
3F:推 stockyo:我写个小程式试试看!! 07/22 17:05
4F:→ stockyo:OK...这样写法满乾净的...谢谢!! 07/22 17:09
5F:→ tinlans:公认的技法是用 c.count(1) 去检查 1 的存在性。 07/23 19:22
6F:→ tinlans:set 这种 unique 的容器 count() 传回值非 0 即 1。 07/23 19:23
7F:→ hwakeye:主要是考量到set也需要新增变数 所以才会想用这种写法 07/25 14:11
8F:→ hwakeye:跟先用count判断有无存在之後再新增 不知道这样时间差多少 07/25 14:12