回答
我假設的頻率是指數組中出現相同結構的次數。
您可能需要爲自定義結構創建散列函數(或爲您的類型重載std::hash<>
)。然後迭代你的數組,爲數組中的每個結構增加一個unordered_map<mytype, int>
的值。這會給你在價值領域的頻率。像下面的東西會工作:
std::array<mytype> elements;
std::unordered_map<mytype, int> freq;
mytype most_frequent;
int max_frequency = 0;
for (const mytype &el : elements) {
freq[el]++;
if (freq[el] > max_frequency) {
most_frequent = el;
}
}
對於這項工作,該地圖將需要能夠創造一個哈希上述功能。默認情況下,它會嘗試使用std :: hash <>。標準明確允許您在標準名稱空間中爲您自己的類型專門化此模板。您可以這樣做:
struct mytype {
std::string name;
double value;
};
namespace std {
template <> struct hash<mytype> {
size_t operator()(const mytype &t) const noexcept {
// Use standard library hash implementations of member variable types
return hash<string>()(t.name)^hash<double>()(t.value)
}
}
}
主要目標是確保任何兩個不包含完全相同值的變量將生成不同的哈希值。以上將各種類型的標準庫哈希函數的結果異或,其中according to Mark Nelson可能與單獨的哈希算法異或。由cppreference的hash reference建議的替代算法是Fowler-Noll-Vo hash function。
也許使用'for(const mytype&el:elements)'來避免創建每個元素的副本。 – StaticBeagle
好點,固定。 – jhauris
你可以使用'std :: map',而不用費力編寫散列函數,除非你有足夠的元素來保證恆定的訪問時間有很大的不同。 – Useless
- 1. 基於頻率的排序
- 2. 對基於特定字段的結構向量排序
- 3. 排序結構的C++向量類
- 4. 在C++中對結構向量排序
- 5. 排序向量的結構
- 6. 自定義排序功能與結構
- 7. 基於變量類的排序向量
- 8. 難隨機化,基於頻率排名
- 9. 定義頻率上的音量(C#)
- 10. 按整數排序結構向量
- 11. 排序一個結構向量
- 12. 基於預定義密鑰的自定義排序
- 13. 包含結構的向量的排序
- 14. 基於另一個部分匹配向量的排序向量
- 15. 核心音頻 - 構建AudioBufferList結構(Q關於C結構定義)
- 16. 基於密鑰自動排序對象的數據結構?
- 17. C++的std ::排序常量結構
- 18. C#/ XNA - 播放基於頻率
- 19. 基於輸入向量對向量進行重新排序
- 20. C++向量排序
- 21. 排序向量C++
- 22. 按頻率排序
- 23. 迭代結構中定義的向量
- 24. std ::結構中的向量定義
- 25. 對包含指針的向量排序爲結構VS結構
- 26. 根據結構的元素對結構對象的向量排序 - C++
- 27. C如何基於結構的結構
- 28. C++無效的比較排序向量的結構
- 29. 排序結構中的成員的向量C++
- 30. 基於頻率對數組進行排序
最簡單的就是使用'std :: sort'並提供一個lambda函數來比較你需要的東西。 – user0042
您可以顯示一個結構將看起來像什麼,然後一個未排序的向量和您想要的排序向量的例子嗎? – CoryKramer
它幾乎聽起來像你需要構建一個直方圖。如果是這種情況'std :: map'確實很好。 – NathanOliver