我想在C STL的sort()函式中傳遞以下函式作為第三個引數。
bool fn(int a, int b, vector< int> v1)
{
if (v1[a]< v1[b]) return true;
else return false;
}
我想根據另一個向量的值對一個向量進行排序。
sort(v2.begin(), v2.end(), fn) 。
如何將第一個向量v1傳遞給函式fn,以便函式fn可以使用它來對第二個向量v2進行排序,而無需使用全域變數?
uj5u.com熱心網友回復:
首先,你的比較器有錯誤的簽名。std::sort希望有一個可呼叫的元素,可以用2個元素來呼叫。
你可以使用一個抓取向量的lambda運算式:
sort(v2.begin(), v2. end(),[&v1](const auto& a,const auto& b){ return v1[a] < v1[b]; })。
我試著把這個函式
fn寫在main里面,希望它能在范圍內,但這并不成功。
你不能在函式中定義函式。你可以在一個函式中用operator()定義一個型別,這基本上就是lambda運算式的作用。下面這個手寫的functor將達到同樣的效果:
struct my_comparator {
std::vector<int>& v1;
bool operator(size_t a,size_t b) {
return v1[a] < v1[b];
}
};
std::sort(v2.begin(),v2.end(), my_comparator{v2})。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328358.html
標籤:
