回答
我假設的頻率是指數組中出現相同結構的次數。
您可能需要爲自定義結構創建散列函數(或爲您的類型重載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. 按整數排序結構向量
- 4. 排序一個結構向量
- 5. 包含結構的向量的排序
- 6. 核心音頻 - 構建AudioBufferList結構(Q關於C結構定義)
- 7. C++的std ::排序常量結構
- 8. std ::結構中的向量定義
- 9. 對包含指針的向量排序爲結構VS結構
- 10. 根據結構的元素對結構對象的向量排序 - C++
- 11. URL重定向C#基於變量
- 12. 結構向量中的結構向量
- 13. 基於控制器結構的MVC自定義視圖路由
- 14. 按頻率對Hadoop結果(類似於字數)進行排序
- 15. 向量的結構和自定義函數
- 16. C++結構定義
- 17. 向量的結構C++
- 18. 排序排序列表基於值C#
- 19. 尋呼和自定義排序結果
- 20. 排序自然結構
- 21. C++ - 自定義的矩陣結構
- 22. 基於實例屬性的自定義數組排序
- 23. 基於自定義域類方法對對象排序
- 24. 基於自定義對象值的排序陣列
- 25. 排序NSArray的基於其它陣列使用自定義類
- 26. 同位素自定義排序基於濾波器
- 27. 基於自定義用戶設置的排序列表
- 28. 排序基於自定義對象中的ArrayList列表
- 29. rabbitmq與基於屬性的自定義排序
- 30. Scala或Java數據結構用於自定義「非嚴格」排序
最簡單的就是使用'std :: sort'並提供一個lambda函數來比較你需要的東西。 – user0042
您可以顯示一個結構將看起來像什麼,然後一個未排序的向量和您想要的排序向量的例子嗎? – CoryKramer
它幾乎聽起來像你需要構建一個直方圖。如果是這種情況'std :: map'確實很好。 – NathanOliver