簡體   English   中英

如何在C ++中獲取向量中元素的等級

[英]How to get the rank of an element in vector in C++

我需要獲得C ++中容器元素的等級(位置索引+ 1),如vectorlist 有沒有方便的方法呢? 我本可以基於nth_element進行測試以找到排名。 或者我可以排序並進行二分搜索以找到排名。 但在最壞的情況下,所有這些似乎都不是很有效。 我想獲得O(lgn)復雜性,並盡可能使用STL算法。

如果您的容器具有隨機訪問迭代器(例如vector)並進行排序,則可以使用std::lower_bound()算法來獲取O(log n)復雜度中的元素索引。 例如:

std::vector<int> v({10,20,30,30,20,10,10,20});
std::sort(v.begin(), v.end());
auto iter = std::lower_bound(v.begin(), v.end(), 20);
std::cout << "index " << int(iter - v.begin()) << std::endl;

(我使用C ++ 11語法來保持代碼簡短,但你應該明白這一點)。

請注意,您可以按排序方式將元素插入向量,因此在查找索引之前無需進行排序。

你似乎不太可能在這里找到比線性搜索更有效的東西。 最糟糕的情況必然是你將所有元素與你搜索的內容進行比較 - 這正是線性搜索給你的。

這可能是不整潔的。

你可以使用向量中的元素在內存中連續的事實。

所以你要做的就是

1)獲取感興趣元素的迭代器地址

2)用vector.begin()減去以獲得總內存

3)除以一個元素的大小

這應該給你的位置(或排名)。

這是假設元素是固定大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM