2015-04-03 74 views
-3

我在C++中有一个集合。我想从集合中删除所有小于指定值的元素。例如。在C++中删除小于给定元素的元素集

std::set setElem; 
setElem.insert(1); 
setElem.insert(45); 
setElem.insert(47); 
//setElem contains {1,45,47} 
//delete all elements less than 46 such that the set now becomes: {47} 

我知道我们可以遍历集合并通过验证它们是否小于46来删除元素。在C++中还有其他一些更有效的方法可以做到这一点吗?

里面我是用

gcc版本是:海湾合作委员会(Ubuntu的/ Linaro的4.6.4-6ubuntu2)4.6.4

+0

使用std ::设置:: LOWER_BOUND和std :: set :: erase – 2015-04-03 12:51:53

+1

无论何时你需要这样的算法,值得看看[标准库的](http://en.cppreference.com/w/cpp/algorithm)。 – chris 2015-04-03 12:52:40

+4

Downvoted,因为你甚至懒得去看标准库引用的算法列表。 – 2015-04-03 12:52:40

回答

1

您可以使用lower_bound()erase()

#include <set> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    set<int>setElem; 

    setElem.insert(1); 
    setElem.insert(45); 
    setElem.insert(46); 
    setElem.insert(47); 
    setElem.insert(50); 
    setElem.insert(51); 

    set<int>:: iterator it; 
    it=setElem.lower_bound(46); 

    //Erasing 
    setElem.erase(setElem.begin(),it); 

    //Printing 
    for(set<int>::iterator it1=setElem.begin(); it1!=setElem.end(); ++it1) 
     cout<< *it1 << "\n"; 
} 
+2

为什么包含一个内部libstdC++头文件?而不是一个标准的头? [坏主意](http://stackoverflow.com/a/25311052/560648),特别是当你在教学。 – 2015-04-03 13:16:59