2011-03-31 127 views
0

如何移除QMap的5个第一元素?移除QMap的5个第一元素

+1

地图没有固有的顺序。 '前五'元素是什么意思?你的意思是前五个元素被添加或者你的元素在地图中有一个可以排序的顺序吗? – Nathanael 2011-03-31 22:08:07

+3

@Nathanael:他们有一个订单,他们按键排序。 – 2011-03-31 22:10:24

+0

@Evan这是事实。我的问题是,这是OP想要用来删除元素的顺序吗?如果我有映射关键字是指针的地图,那么这些元素可能会按照指针的值进行排序。然而,这种排序可能没有任何意义。 – Nathanael 2011-03-31 22:15:41

回答

3

像这样的东西可能会工作:

const size_t count = std::min<size_t>(5, m.size()); 
for(int i = 0; i < count; ++i) { 
    m.erase(m.begin()); 
} 

DEMO

#include <iostream> 
#include <map> 
#include <algorithm> 

int main() { 

    std::map<int,int> m; 
    m.insert(std::make_pair(0,0)); 
    m.insert(std::make_pair(1,1)); 
    m.insert(std::make_pair(2,2)); 
    m.insert(std::make_pair(3,3)); 
    m.insert(std::make_pair(4,4)); 
    m.insert(std::make_pair(5,5)); 
    m.insert(std::make_pair(6,6)); 

    const size_t count = std::min<size_t>(5, m.size()); 
    for(size_t i = 0; i < count; ++i) { 
     m.erase(m.begin()); 
    } 

    for(std::map<int,int>::const_iterator it = m.begin(); it != m.end(); ++it) { 
     std::cout << it->second << std::endl; 
    } 
} 

使用DEMO QMap

#include <iostream> 
#include <QMap> 

int main() { 

    QMap<int,int> m; 
    m[0] = 0; 
    m[1] = 1; 
    m[2] = 2; 
    m[3] = 3; 
    m[4] = 4; 
    m[5] = 5; 
    m[6] = 6; 

    const size_t count = qMin<size_t>(5, m.size()); 
    for(size_t i = 0; i < count; ++i) { 
     m.erase(m.begin()); 
    } 

    for(QMap<int,int>::const_iterator it = m.begin(); it != m.end(); ++it) { 
     std::cout << it.value() << std::endl; 
    } 
} 
0

地图中没有'First'和'Last'这样的东西。 其QMap<Key, T>而元素是由密钥部分,它通常是非数字访问。

+2

博洛尼亚,http://doc.qt.nokia.com/4.6/qmap.html特别指出''当迭代QHash时,项目是任意排序的。使用QMap时,项目总是按键排序。“' – 2011-03-31 22:15:32

相关问题