一個可能看起來微不足道的問題,但我想知道在將包含重複整數的數組轉換爲unordered_set之後,是否有辦法獲得唯一的整數計數。清楚的是,我從一些數組開始,變成了一個無序集,突然間,unordered_set只包含唯一整數,並且我簡單地在unordered_set中的整數的重複數之後。 這可能嗎? (類似unordered_set.count(指數)?)如何統計unordered_set中的唯一整數?
回答
可能出現瑣碎的問題,但我想知道是否有獲得整數計數的方式後,我變換含重複整數到一個數組,獨特unordered_set。
如果容器是連續的,就像一個數組,那麼我相信你可以用ptrdiff_t
來做一些迭代器數學計算。不過,我不確定非連續的容器。
由於您使用數組開始:在陣列上
- 呼叫
unique
unique
返回iter.end()
- 計算
ptrdiff_t count
使用iter.begin()
和iter.end()
請記住,在步驟3的計算需要針對sizeof
和elem進行調整ENT。
但是爲了解釋Beta,一些容器適合這種情況,而另一些則不適合。如果您有無序集(或地圖或樹),則信息將不可用。
根據您對user2357112問題的回答,我會寫一個解決方案。 所以,讓我們假設,而不是unordered_set我們將使用一個載體,我們的矢量有這樣的價值觀:中出現了多少次特定值
{1, 1, 1, 3, 4, 1, 1, 4, 4, 5, 5};
所以,我們想要得到的數字(在不同的載體,我認爲)在向量中,對嗎?在這種情況下,結果是:1出現5次,3出現一次,4出現3次,5出現2次。
爲了得到這個工作,一個可能的解決方案可以是這樣的:
- 從源矢量獲取唯一項並將它們存儲在不同的載體,所以這個載體將包含:1,3,4, 5
- 遍歷整個獨特向量並從源向量中計數這些元素。
- 打印結果
從點1中的代碼,可以是這樣的:
template <typename Type>
vector<Type> unique_entries (vector<Type> vec) {
for (auto iter = vec.begin(); iter != vec.end(); ++iter) {
auto f = find_if (iter+1, vec.end(), [&] (const Type& val) {
return *iter == val;
});
if (f != vec.end()) {
vec.erase (remove (iter+1, vec.end(), *iter), vec.end());
}
}
return vec;
}
從點2中的代碼,可以是這樣的:
template <typename Type>
struct Properties {
Type key;
long int count;
};
template <typename Type>
vector<Properties<Type>> get_properties (const vector<Type>& vec) {
vector<Properties<Type>> ret {};
auto unique_vec = unique_entries (vec);
for (const auto& uv : unique_vec) {
auto c = count (vec.begin(), vec.end(), uv); // (X)
ret.push_back ({uv, c});
}
return ret;
}
當然,我們不需要Properties類來存儲鍵和計數值,你可以只返回一個int向量(帶有元素數),但正如我所說的,這是可能的解決方案之一。因此,通過使用unique_entries我們得到獨特的表項(:))的載體,那麼我們就可以在整個向量VEC迭代(get_properties,使用的std ::算標記爲(X)),以及性能的push_back反對向量ret。
從3點的代碼,可能是這樣的:
template <typename Type>
void show (const vector<Properties<Type>>& vec) {
for (const auto& v : vec) {
cout << v.key << " " << v.count << endl;
}
}
// usage below
vector<int> vec {1, 1, 1, 3, 4, 1, 1, 4, 4, 5, 5};
auto properties = get_properties (vec);
show (properties);
而結果是這樣的:
1 5
3 1
4 3
5 2
什麼是值得大家注意,這個例子已經使用模板來寫提供選擇向量中元素類型的靈活性。如果你想存儲的不是int類型的長,很長很長,短等價值觀,所有你需要做的是改變源向量的定義,例如:
vector<unsigned long long> vec2 {1, 3, 2, 3, 4, 4, 4, 4, 3, 3, 2, 3, 1, 7, 2, 2, 2, 1, 6, 5};
show (get_properties (vec2));
會產生:
1 3
3 5
2 5
4 4
7 1
6 1
5 1
這是期望的結果。
還有一點需要注意,你也可以用字符串矢量來做到這一點。
vector<string> vec_str {"Thomas", "Rick", "Martin", "Martin", "Carol", "Thomas", "Martin", "Josh", "Jacob", "Jacob", "Rick"};
show (get_properties (vec_str));
而結果是:
Thomas 2
Rick 2
Martin 3
Carol 1
Josh 1
Jacob 2
你好,這是一個非常好的和複雜的答案,但我實際上是在使用unordered_map之後,因爲人們早先已經明確說它使用unordered_set是無用的。你知道如何使用unordered_map完全不用從頭開始編寫代碼?至多應該三線操作,不是嗎? – Lexka
我很抱歉,但現在我沒有任何其他解決方案,特別是使用unordered_map的解決方案。 –
- 1. 統計整套數據庫中唯一元素的數量
- 2. RethinkDb中的唯一整數計數器
- 3. 如何統計Dictionary中唯一值的出現次數?
- 4. 如何統計php mysql中的唯一數據?
- 5. 如何統計兩列中唯一字符串的數量?
- 6. 統計整個MongoDB集合中數組中唯一值的出現次數
- 7. 如何統計具有PIG的唯一用戶的數量
- 8. 統計excelsheet中的唯一項
- 9. 如何統計Python列表中唯一出現的多個唯一事件?
- 10. Access 2003 - 統計唯一值
- 11. 如何統計重複的整數
- 12. 如何統計postgres中一組querystrings的整數頻率
- 13. 如何統計mysql中的唯一記錄
- 14. 如何統計文件日誌中的唯一用戶?
- 15. 如何統計表格中的唯一項目?
- 16. 如何統計列表中的唯一項目?
- 17. 如何統計唯一字符(只能是字母和數字)
- 18. 統計數組中出現的唯一數組
- 19. 統計表中唯一數據的數量
- 20. 如何根據唯一整數獲取唯一字母數字
- 21. 如何統計SQL中唯一的列和行的發生次數?
- 22. 如何比較唯一值的計數
- 23. 統計數組中的整數
- 24. MySQL查詢統計行的唯一列
- 25. Scala:如何統計特定索引中唯一項目的出現次數?
- 26. 如何統計數據表中的整行數
- 27. 如何統計C++中的整數位數?
- 28. 統計文檔中字符串的唯一出現次數
- 29. 統計數據框中的唯一列表
- 30. 統計數據庫中的唯一記錄
假設我有陣列'[2,1,2,1,2]',我把它變成一組無序。你是問如何得到集合中的整數數目(即2),還是你想要得到每個整數出現的次數(所以2出現的次數是3)?第一件事很簡單,第二件事不是你使用unordered_set。 – user2357112
那麼,是不是所有*值在一組「獨特」?這不是一個集合的定義要求之一,它只包含每個「關鍵」之一?您可能想要閱讀例如[這個'std :: unordered_set'參考](http://en.cppreference.com/w/cpp/container/unordered_set)。 –
嗨,這是第二件事。我可以使用unordered_map完成第二件事嗎?) – Lexka