所以我有一个 vector ,我希望元素始终被排序。我应该如何将一个元素插入该 vector 并在弹出它们时保持元素排序。然而,我查看了 std::lower_bound
,结果与我想要的相反。
例如,这就是我想要的:当我弹出 vector 中的所有元素时,它应该是:
1 2 3 4 5。这意味着 vector 必须将它们存储为 5 4 3 2 1。如果使用下限, vector 将它们存储为 1 2 3 4 5,并弹出为 5 4 3 2 1。此外,将传入比较仿函数,以便 lower_bound
函数使用比较仿函数。有没有办法取比较仿函数的相反数?
为了让你的 vector 始终保持有序,你应该总是将新元素插入到正确的位置。由于您希望按升序弹出元素,而 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
}