2010-12-23 11 views
8

वर्तमान में मैं संयोजन उत्पन्न करने की कोशिश कर रहा हूं और मैं निम्नलिखित कोड का उपयोग कर रहा हूं:Std :: प्लेसहोल्डर का उपयोग करने के लिए मुझे किन पुस्तकालयों की आवश्यकता है?

#include <vector> 
#include <algorithm> 
#include <iostream> 
#include <functional> 

template<class RandIt, class Compare> 
bool next_combination(RandIt first, RandIt mid, RandIt last) 
{ 
    std::sort(mid, last, std::bind(std::less<int>(), std::placeholders::_2 
              , std::placeholders::_1)); 
    return std::next_permutation(first, last, std::less<int>()); 
} 

g ++ का प्रयोग करना यह संकलित करने में विफल रहता है:

next_combo.cpp: In function ‘bool next_combination(RandIt, RandIt, RandIt)’: 
next_combo.cpp:10: error: ‘bind’ is not a member of ‘std’ 
next_combo.cpp:10: error: ‘std::placeholders’ has not been declared 
next_combo.cpp:11: error: ‘std::placeholders’ has not been declared 

मैंने सोचा था कि std :: प्लेसहोल्डर्स को कार्यात्मक में घोषित किया गया था, लेकिन अब मैं उलझन में हूँ। क्या मुझे बस बूस्ट का उपयोग करना चाहिए?

इसके अलावा बाकी प्रोजेक्ट C++ 0x का उपयोग कर रहा है, तो क्या सी ++ 0x सुविधाओं का उपयोग करके इसे लिखने का एक बेहतर तरीका है?

किसी भी मदद की बहुत सराहना की है :)

+3

आपको उनको प्राप्त करने के लिए अपने g ++ कंपाइलर के साथ C++ 0x ध्वज का उपयोग करना होगा। या बढ़ावा :: बांधें। – Anycorn

+0

@aaa, धन्यवाद, ऐसा लगता है कि यह मेरी समस्या का समाधान कर चुका है। – shuttle87

+1

आप बोझिल बांध के बजाय लैम्बडा का उपयोग क्यों नहीं करते? यदि आप सी ++ 0x का उपयोग करते हैं, तो यह std :: sort (v.begin(), v.end(), [] (int l, int r) लिखना है -> बूल { वापसी l> r; }); इंटीड –

उत्तर

5

आप बोझिल बांध के बजाय लैम्बडा का उपयोग क्यों नहीं करते? यदि आप C++ 0x उपयोग करते हैं, यह भावना बजाय

std::sort(v.begin(), v.end(), [](int l, int r)->bool { return l > r; });

लिखने के लिए है। ध्यान दें, आपको स्पष्ट रूप से रिटर्न प्रकार निर्दिष्ट करने की आवश्यकता नहीं है। मैंने इसे स्पष्ट करने के लिए इस तरह लिखा था।

7

जरुर वहाँ एक बेहतर तरीका है। उपर्युक्त करने के बजाय std :: more_equal का उपयोग करें। here कार्यात्मक में और क्या है जांचें।

कहने के लिए भूल गए - प्लेसहोल्डर का उपयोग करने के लिए, आपको C++ 0x विशेषताओं को सक्षम करने की आवश्यकता है।

+1

या अवरोही क्रम के लिए 'std :: big', या रिवर्स इटरेटर्स के साथ क्रमबद्ध करें। – UncleBens

संबंधित मुद्दे

 संबंधित मुद्दे