के लिए कुंजी के रूप में std :: tuple का उपयोग करना नीचे दिए गए कोड के साथ, मुझे एमएसवीसी में एक बहुत भ्रमित त्रुटि मिलती है जो कि मुख्य प्रकार (एक std :: tuple) को एक std में परिवर्तित किया जा रहा है: : स्ट्रिंग।std :: unordered_map
#include <iostream>
#include <string>
#include <tuple>
#include <utility>
#include <unordered_map>
typedef std::tuple<std::string,int,char> key_t;
struct key_hash : public std::unary_function<key_t, std::size_t>
{
std::size_t operator()(const key_t& k) const
{
return std::get<0>(k)[0]^std::get<1>(k)^std::get<2>(k);
}
};
struct key_equal : public std::binary_function<key_t, key_t, bool>
{
bool operator()(const key_t& v0, const key_t& v1) const
{
return (
std::get<0>(v0) == std::get<0>(v1) &&
std::get<1>(v0) == std::get<1>(v1) &&
std::get<2>(v0) == std::get<2>(v1)
);
}
};
struct data
{
std::string x;
};
typedef std::unordered_map<key_t,data,key_hash,key_equal> map_t;
int main()
{
map_t m;
data d;
d.x = "test data";
m[std::make_tuple("abc",1,'X')] = d;
auto itr = m.find(std::make_tuple(std::string("abc"),1,'X'));
if (m.end() != itr)
{
std::cout << "x: " << itr->second.x;
}
return 0;
}
त्रुटि:
Error 1 error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1 from 'const std::tr1::tuple<_Arg0,_Arg1,_Arg2>' to 'const std::basic_string<_Elem,_Traits,_Ax> &' c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\tuple 127 1
संकलक: एमएस दृश्य स्टूडियो 2010
ideone पर, मैं और भी अधिक जटिल त्रुटि निम्नलिखित हो:
मैं कर सकते हैं ' मुझे लगता है कि मैं गलत कहां गया हूं।
ध्यान दें कि आप की तरह 'कुंजी तुलना करने के लिए की जरूरत नहीं है std :: मिल <0> (V0) == std :: मिल <0> (v1) && .....' इसके बजाय आप बस लिख सकते हैं 'वापसी V0 = = v1'। – Nawaz
@ नवाज: टिप्पणी के लिए धन्यवाद, मैंने कोशिश की लेकिन मुझे अभी भी त्रुटि मिल रही है। – Gerdiner
कौन सी रेखा त्रुटि उत्पन्न कर रही है, पहले मेक_टूपल या दूसरा वाला है? विचार एक त्रुटि key_t को परिभाषित किया जा रहा है। प्रकार का नाम बदलने का प्रयास करें। – Ajay