是否有像向量或队列这样的数据类型,您可以轻松添加项目,但是当它们被添加时,它们会按正确的顺序自动插入?
还有一种简单的方法可以从矢量或队列中删除项目,如果你知道它是什么,而不必实际搜索并找到它?
答案 0 :(得分:2)
我不知道这样的容器。
存在 std::sort
,您可以在其中指定排序功能,但实际上直接在右侧位置插入项目通常更有效。
如果你总是这样做,你必须要解决的唯一“问题”是将一个项目添加到已排序的列表中,这可以在最差的线性时间内完成。
请注意std::vector<T>::insert()
将迭代器作为参数,以指示插入的位置。您可能希望编写一个返回此类迭代器的findPosition()
方法。然后,编写sorted_insert()
方法很简单,就像:
std::vector<int>::iterator findPosition(int v);
void sorted_insert(std::vector<int>& vec, int v) { vec.insert(findPosition(v), v); }
void foo()
{
std::vector<int> vec;
sorted_insert(vec, 4);
}
答案 1 :(得分:2)
听起来像是std::set
或std::multi_set
。
答案 2 :(得分:1)
听起来你正在寻找set
而不是矢量。它将根据自然顺序(<
运算符)进行排序。要按值删除元素,请调用erase
。
或者,您可以在向量上使用sort
来对元素进行排序。如果您需要随机访问元素,那么您将需要这种方法;已排序的容器不提供随机访问。
要在已排序的矢量中查找元素,您可以使用binary_search
。
答案 3 :(得分:0)
取决于您的需求以及为什么需要它。
不,在标准的lib中,没有“已排序”的向量或队列。如果您想使用 标准库,则有2个选项:
其他选项是使用地图或集合,如果它们可以解决您的问题(因为我们不知道它是什么)
另一个选择是寻找一些第三方库 - 我想boost会有这样的容器,但我真的不知道。
“还有一种简单的方法可以从矢量或队列中删除项目,如果你知道它是什么” - 你是什么意思?你有一个迭代器或?还是它的索引?我会在你更新时编辑我的答案(: