یافتن کوچکترین عدد بزرگتر از صفر در وکتور - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

یافتن کوچکترین عدد بزرگتر از صفر در وکتور

+1 امتیاز
آیا تو stl راهی وجود داره که بتونیم کوچکترین عدد بزرگتر از صفر را پیدا کنیم؟

ممنون
سوال شده اردیبهشت 2, 1394  بوسیله ی hojat1 (امتیاز 875)   12 68 99

2 پاسخ

+2 امتیاز
 
بهترین پاسخ
 template <class It>
 It min_element_distance(It begin, It end){
	 using T = iterator_traits<It>::value_type;
	 auto positive_count = 0;
	 for_each(begin, end, [&positive_count](T& value){ if (value >= 0) positive_count++; });

	 auto pos = end;
	 if (positive_count)
		 pos = min_element(begin, end, [](T a, T b){ return a >= 0.f && (b < 0.f || a < b); });


	 if (positive_count == 0 || pos == end)
		 pos = min_element(begin, end, [](T a, T b){ return abs(a) < abs(b); });
	
	 return pos;
 }

 template <class It ,class GetValue>
 It min_element_distance(It begin, It end, GetValue func){
	 using T = decltype(func(*begin));
	 auto len = std::distance(begin, end);
	 
	 vector<T> arr;
	 arr.reserve(len);
	 for (auto item = begin; item != end; item++)
		 arr.push_back(func(*item));

	 auto pos = min_element_distance(arr.begin(), arr.end());
	 return begin + distance(arr.begin(),pos);
 }

int main(){
	vector<pair<float, int>> arr = { make_pair(-40, 0), make_pair(-10, 0), make_pair(-20, 0), make_pair(-30,0) };
	
	cout << min_element_distance(arr.begin(), arr.end(), [](const pair<float, int>& value){return value.first; })->first;
return 0;
    
}

 

پاسخ داده شده اردیبهشت 4, 1394 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد اردیبهشت 6, 1394 بوسیله ی hojat1
+1 امتیاز
بله از خود تابع std::min_element می تونید استفاده کنید عبارت lambda را به صورت زیر مشخص نمائید.

auto pos = std::min_element(std::begin(vec), std::end(vec), [](const int &value1, const int &value2) {return value1 > 0 && (value2 <= 0 || value1 < value2);} )
پاسخ داده شده اردیبهشت 3, 1394 بوسیله ی hamed_akbari (امتیاز 60)   2 8 11
ویرایش شده اردیبهشت 3, 1394 بوسیله ی مصطفی ساتکی
این روش یه مشکلی داره که اگر همه اعداد منفی باشند درست عمل نمی کنه.
...