我知道堆是如何工作的以及它如何排列最小和最大元素。如果vector僅包含int
,則很容易在STL中應用make_heap。但如果向量包含字符串和int結構,如何應用make_heap()
。我想根據int
的值來構造堆。 請告訴我該怎麼做。C++ STL - make_heap with pair <int,string> as data type
回答
你必須爲你的結構提供比較函數:
struct A
{
int x, y;
};
struct Comp
{
bool operator()(const A& s1, const A& s2)
{
return s1.x < s2.x && s1.y == s2.y;
}
};
std::vector<A> vec;
std::make_heap(vec.begin(), vec.end(), Comp());
爲什麼比較器中的第二個條件('s1.y == s2.y')? – jogojapan
它只是一個例子,不關心比較邏輯 –
我不認爲比較函數有任何需要,除非你想指定你自己的邏輯。如果您想要進行字典比較,只需使用默認值即可。 – juanchopanza
是的,你可以使用std::make_heap
與std::pair<int, std::string>
直接,因爲std::pair
具有所需的小於比較operator<
。甚至在上面引用的例子中使用了std::pair
的特定實例。
- 1. 如何對矢量<pair <int,pair <int,pair <string,pair <int , int >>>>>進行排序
- 2. std :: make_heap with pairs
- 3. C++ STL make_heap和pop_heap不工作
- 4. STL priority_queue <pair> vs. map
- 5. 如何使用vector <pair <int,pair <int,int> >>進行排序?
- 6. HTML <input type =「text」... as <input type =「file」
- 7. 在C++中使用映射<pair <int,int>,string>
- 8. 從vector <pair <double *,pair <double *,int * >>到數組的C++轉換
- 9. 如何對一個向量進行排序<pair <string,pair <int , int> >>?
- 10. 爲什麼std :: pair <int, int>可以從const std :: pair <int, float>&?
- 11. C++ STL map,std :: pair作爲密鑰
- 12. 爲何'is_convertible'在<utility> std :: pair(STL)?
- 13. vector <pair <int,unordered_set <int> >>爲對
- 14. C++:如何使用std :: less <int> with boost :: bind和boost :: lambda?
- 15. FourCC as int C#
- 16. data(with eval)as jquery-method的參數
- 17. Javax.persistence with @Entity bean save int [] as bytea(postgres)
- 18. 調用'(std :: pair <unsigned int,unsigned int>)(unsigned int&,unsigned int)'
- 19. std :: vector <std :: pair <int,std :: pair <bone,std :: string> >>不按int整理?
- 20. 無法使用對<int, int>作爲C++中的鍵集STL
- 21. C#LINQ存儲int? as int
- 22. Cast StringCollection as List <int>
- 23. std :: pair <int, int> vs兩個int的結構
- 24. 如何定義,初始化和使用 - vector <vector <pair < int,int >,int>> v in C++?
- 25. 'struct std :: pair <int, int>'has no member named'serialize'
- 26. 實施Dijkstra算法使用STL make_heap
- 27. C++:STL multimap.equal_range()
- 28. 使用pair with accumulate時出現問題
- 29. Q設置<data type>了的QList
- 30. C++:矢量<對<vector<int>,INT>>
你有什麼試過?特別是,你是否嘗試給出一個明確的比較函數? – rici
我不知道如何處理比較的樂趣... –
自從我看了一段時間以來,已經有一段時間了,但是'pair'不是按照你想要的順序來做的嗎? – Hurkyl