假設我有一堆Donut
對象,並且每個這些甜甜圈都有一個公共整數屬性diameter
。如果我有甜甜圈矢量,我怎樣才能提取最小或最大直徑的甜甜圈?如何從矢量中提取基於屬性的最大對象?
4
A
回答
14
您使用std::min_element
和std::max_element
。例如,給定一個std::vector<int>
:
std::vector<int> v;
std::vector<int>::iterator it = std::max_element(v.begin(), v.end());
// 'it' points to the largest element in 'v'
如果你想使用其他比operator<
,你需要編寫一個自定義的比較的東西(這是默認情況下使用)比較元素:
bool compare_donut_diameters(const Donut& x, const Donut& y)
{
return x.diameter < y.diameter;
}
用作:
std::vector<Donut> v;
std::vector<Donut>::iterator it = std::max_element(v.begin, v.end(),
compare_donut_diameters);
您還可以使用函數對象(也稱爲函子)實現比較器,或者如果您的編譯器支持lambda表達式NS可以使用lambda:
auto it = std::max_element(v.begin(), v.end(),
[](const Donut& x, const Donut& y) { return x.diameter < y.diameter; });
1
您可以使用std::min_element
:
// You can use a functor instead!
bool compare_donut(const Donut& lhs, const Donut& rhs)
{ return lhs.diameter < rhs.diameter; }
...
// min_donut is an iterator to the smallest donut in donut_vector.
std::vector<Donut>::iterator min_donut =
std::min_element(donut_vector.begin(), donut_vector.end(), compare_donut);
如果你想獲得最大的,你可以使用std::max_element
用相同的比較。
1
您可以將std :: max_element/std :: min_element算法與運算符<結合使用,該運算符使用diameter屬性或用戶提供的比較函數進行比較。
http://www.cplusplus.com/reference/algorithm/max_element/
http://www.cplusplus.com/reference/algorithm/min_element/
相關問題
- 1. Matlab:基於矢量B中的值從矢量A提取值
- 2. 從對象矢量中提取元素
- 3. 基於CodeIgniter中的屬性值提取對象/ PHP
- 4. 從矢量中提取最低複數
- 5. 如何根據類屬性查找矢量中的對象?
- 6. 從基於max屬性的數組獲取對象
- 7. 如何從屬性訪問lambda中提取對象引用
- 8. 如何從對象發件人中提取屬性值?
- 9. 從矢量中提取值
- 10. 排序對象的屬性對象的矢量
- 11. 通過對象屬性提取對象
- 12. 指定對象屬性的唯一矢量對象
- 13. 從具有多個屬性的列表對象中獲取最小/最大值
- 14. 如何從模板中的對象矢量獲取迭代器?
- 15. 獲取最大鍵的矢量地圖中的矢量
- 16. 基於屬性的單獨對象組
- 17. Linq基於對象屬性的不同
- 18. 獲取對象中最大索引鍵的屬性
- 19. 獲取對象中屬性的最大值
- 20. 如何從基於對象
- 21. LINQ基於對象內列表中的屬性選擇對象
- 22. 如何從Eigen中的索引矢量中提取(Eigen :: Vector的)子矢量?
- 23. 從對象列表中獲取基於對象變量的對象
- 24. 從對象獲取屬性
- 25. 獲取對象列表中具有最大屬性值的對象列表
- 26. 使用LINQ從列表中獲取特定屬性的最大值的對象
- 27. 從PHP中的對象獲取屬性
- 28. 基於對象屬性創建數組
- 29. 篩選基於對象屬性
- 30. 基於屬性刪除對象
是的,它肯定會需要一段時間才能弄清楚如何在80列;-) – 2010-10-30 20:43:53
@Steve使用lambda函數:認真!我想我重新格式化了最後一個例子四次...這是一件好事,寬屏顯示器更普遍。我來了240個字符行! – 2010-10-30 20:45:52
C++ 0x看起來很國外...「auto」,匿名函數...... pfft :-) – bjoernz 2010-10-30 20:46:24