检查 c++ 中是否存在特定元素; STL矢量
我想在像 v[i] 一样访问某个元素之前检查它是否存在于特定的向量位置(例如 i)。你能让我知道我该怎么做吗?
谢谢。
I wanted to check whether an element exist at a particular vector location, say i, before accessing it like v[i]. Could you let me know how can I do that?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
保证元素存在于每个
i
位置,其中i >= 0
且i
v.size()
因为向量是连续的元素序列,并且不可能出现“空洞”。An element is guaranteed to exist at every position
i
wherei >= 0
andi < v.size()
as vectors are contiguous sequences of elements and "holes" are not possible.使用
v.size()
。Use
v.size()
.如果想知道向量中是否存在某个元素,最快的方法是对数组进行排序,然后使用搜索方法(例如二分搜索)。
如果多次执行此操作,更改数据结构也许会产生更好的性能。 std::map 对此很有用,如果您的编译器有,请使用哈希表或映射。
否则,在不访问向量的情况下确定向量中是否存在值的唯一方法是使用第二个数据结构来记住该值和位置。
If you want to know if an element exists in a vector, the quickest method is to sort the array then use a search method such as binary search.
If this action is performed many times, perhaps changing the data structure will yield better performance. An std::map is good for this, and if your compiler has one, use a hash table or map.
Otherwise the only way to determine if a value exists in an vector without accessing the vector is to use a second data structure to remember the value and position.
我了解您在特定维度(例如
n
)预分配了一个std::vector
,并且您想查看索引处的元素是否i
> (i < n
) 已初始化或刚刚分配。就像 @Thomas Matthews 所说,您可以使用第二种数据结构,一个简单的
bool[n]
,其中在索引k
处存储true 如果
vector
中索引k
处的元素存在,否则false
。I understand you have a
std::vector
preallocated at a specific dimension, let's sayn
, and you want to see if the element at indexi
(i < n
) was initialized or is just allocated.Like @Thomas Matthews said, you can use a second data structure, a simple
bool[n]
, in which, at indexk
, you storetrue
if the element at indexk
in yourvector
exists andfalse
otherwise.