【问题标题】:inserting element to a sorted vector and keeping elements sorted将元素插入已排序的向量并保持元素排序
【发布时间】:2013-02-09 12:06:24
【问题描述】:

所以我有一个向量,我希望元素始终被排序。我应该如何将元素插入该向量并在弹出元素时保持元素排序。我查看了std::lower_bound,然而,这与我想要的相反。

例如,这就是我想要的:当我弹出向量中的所有元素时,它应该是: 1 2 3 4 5。这意味着向量必须将它们存储为 5 4 3 2 1。如果使用下限,向量将它们存储为 1 2 3 4 5,并弹出为 5 4 3 2 1。另外,将传入一个比较函子,以便lower_bound 函数使用比较函子。有没有办法与比较函子相反?

【问题讨论】:

  • 顺便说一句,std::set 保持排序,但不能有重复项(请参阅std::multiset)。至于取反,有std::not1
  • 也许您使用了错误的容器。看这里:stackoverflow.com/a/471461/78845

标签: c++ sorting vector insertion-sort


【解决方案1】:

要始终保持矢量排序,您应该始终将新元素插入到适当的位置。由于您想按升序弹出元素,并且 vector 仅提供 pop_back() 方法,因此您应该按降序对元素进行排序。所以首先你需要找到合适的位置,然后插入那里:

typedef std::vector<int> ints;

void insert( ints &cont, int value ) {
    ints::iterator it = std::lower_bound( cont.begin(), cont.end(), value, std::greater<int>() ); // find proper position in descending order
    cont.insert( it, value ); // insert before iterator it
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2022-06-24
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多