2009-07-07 25 views
8
// BOOST Includes 
#include <boost/assign.hpp>    // Boost::Assign 
#include <boost/assign/list_of.hpp>  // Boost::Assign::List_Of 
#include <boost/assign/std/map.hpp>  // Boost::Assign::Map_List_Of 
#include <boost/tuple/tuple.hpp>  // Boost::Tuples 
// STD Includes 
#include <map> 
#include <vector> 
#include <string> 
// Using namespaces 
using namespace std; 
using namespace boost; 
using namespace boost::assign; 
// Consts 
    const map<string, string> query_map = map_list_of<string, string> 
    ("4556_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 4556") 
    ("7552_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 7552") 
    ("234x_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 2344 OR PMU_ID = 2345 OR PMU_ID = 2346 OR PMU_ID = 2347 OR PMU_ID = 2348") 
    ("813x_SELECT_FILENAME", "SELECT FILENAME FROM Files WHERE PMU_ID = 8132 OR PMU_ID = 8133 OR PMU_ID = 8134 OR PMU_ID = 8135 OR PMU_ID = 8136"); 
    const map<string, std::vector<int>> vector_map = map_list_of<string, std::vector<int>> 
    ("4556", list_of(4556)) 
    ("7552", list_of(7552)) 
    ("234x", list_of(2344)(2345)(2346)(2347)(2348)) 
    ("813x", list_of(8132)(8133)(8134)(8135)(8136)); 

बूस्ट का उपयोग करना - परीक्षण के लिए init std :: कंटेनर इन्सिट करना संभव है। एक कॉन्स std :: map या std :: map बनाना उपरोक्त कोड दिखाता है। const map<string, std::vector<int>> बनाना थोड़ा अधिक जटिल है - लेकिन अभी भी काफी आसान है।const std :: map <boost :: tuples :: tuple, std :: string>?

मैं const std::map<boost::tuples::tuple<string, string, string>, string> के साथ आने की कोशिश कर रहा हूं लेकिन मैं इसे आरंभ करने में विफल रहा हूं। क्या किसी और के साथ कोई भाग्य है?

// Typedefs 
typedef boost::tuples::tuple<string, string, string> x3_string_tuple; 
// Constants 
const map<x3_string_tuple, string> query_selector_map = map_list_of<x3_string_tuple, string> 
("4556", "SELECT", "FILENAME"), "4556_SELECT_FILENAME"); // ETC. 
+0

कृपया हमेशा त्रुटि संदेश जो संकलन त्रुटियों से परिणाम में शामिल हैं (यदि हो तो) –

उत्तर

22

मैंने कोशिश की, और यह विफल हो गया क्योंकि मानचित्र की चाबियाँ तुलनीय होने की आवश्यकता है (std::less के साथ, इस प्रकार operator< परिभाषित होना आवश्यक है)। boost::tuple की तुलना ऑपरेटर हेडर boost/tuple/tuple_comparison.hpp में परिभाषित हैं।

कि शामिल करने के बाद, इस कोड को ठीक काम करता है:

#include <boost/assign/list_of.hpp> 
#include <boost/tuple/tuple.hpp> 
#include <boost/tuple/tuple_comparison.hpp> 
#include <map> 
#include <string> 

using std::string; 
typedef boost::tuple<string, string, string> tpl_t; 

int main() { 
    using boost::assign::map_list_of; 
    std::map<tpl_t, string> const m = 
     map_list_of(tpl_t("a","b","c"), "c")(tpl_t("x","y","c"), "z"); 
} 
+0

वाह, धन्यवाद! यह मेरे लिए पूरी तरह से काम करता है –

0

मैं

const map<x3_string_tuple, string> query_selector_map = map_list_of<x3_string_tuple, string> 
(x3_string_tuple("4556", "SELECT", "FILENAME"), "4556_SELECT_FILENAME"); 

की कोशिश करेंगे लेकिन, ईमानदारी से, हो सकता है यह सिर्फ तार के 3 अलग-अलग सूचियों, और उसके बाद एक-एक करके उन्हें एक टपल में गठबंधन है और एक के लिए है कि जोड़ने के लिए आसान है नक्शा।

+0

मेरी प्रारंभिक सोचा था, लेकिन यह संकलन त्रुटियों की एक बड़ी राशि में हुई है। आगे बढ़ें - देखें कि क्या होता है। –

+0

मैं 3 सूचियों के संस्करण पर विचार कर रहा था लेकिन मैं यह देखने में असफल रहा कि कैसे इसे बढ़ावा देने के साथ 1 में शुरू किया जा सकता है: असाइन करें ताकि यह सब एक साथ काम करे:/ –

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