C++ c++&引用;错误:没有匹配的函数用于调用";当在一组中计数时
我正在使用一个集合和一个元组类来实现一个映射,这是我做的一个练习,我不断得到这个错误:C++ c++&引用;错误:没有匹配的函数用于调用";当在一组中计数时,c++,function,map,set,matching,C++,Function,Map,Set,Matching,我正在使用一个集合和一个元组类来实现一个映射,这是我做的一个练习,我不断得到这个错误:error:std::set::count(Tuple&)调用没有匹配的函数。 这是我的代码: template <class K,class V> class Tuple { private: K* mKey; V* mValue; public: Tuple(const K& key, const V& val) {
error:std::set::count(Tuple&)调用没有匹配的函数。
这是我的代码:
template <class K,class V> class Tuple
{
private:
K* mKey;
V* mValue;
public:
Tuple(const K& key, const V& val)
{
mKey = &key;
mValue = &val;
};
Tuple(const K& key)
{
mKey = &key;
};
const K& getKey()
{
return *mKey;
};
const V& getValue()
{
return *mValue;
};
void setKey(const K& key)
{
mKey=&key;
};
void setValue(const V& val)
{
mValue=&val;
};
bool operator< (Tuple<K,V>& t)
{
return *mKey<*t.mKey;
};
bool operator== (Tuple<K,V>& t)
{
return *mKey==*t.mKey;
};
};
template <class K,class V> class map
{
private:
set<Tuple<K,V> >* mTupleMap;
public:
map()
{
mTupleMap = new set<Tuple<K,V> >;
};
void insert(const K& key,const V& val)
{
Tuple<V,K> tmp(key,val);
if(mTupleMap->count(tmp)!=0)
{
typename set<Tuple<K,V> >::iterator it;
it=mTupleMap->find(tmp);
(*it).setValue(val);
}
else
{
mTupleMap->insert(tmp);
}
}
const V& getValue(const K& key)
{
set<V,K> tmp(key);
if(mTupleMap->count(tmp)!=0)
{
typename set<Tuple<K,V> >::iterator it;
it=mTupleMap->find(tmp);
return (*it).getValue();
}
return NULL;
}
};
int main()
{
map<int,char> mapIntToChar;
mapIntToChar.insert(1,'a');
mapIntToChar.insert(2,'b');
mapIntToChar.insert(1,'c');
cout << mapIntToChar.getValue(1) << endl;
return 0;
}
模板类元组
{
私人:
K*mKey;
V*m值;
公众:
元组(常量K和key,常量V和val)
{
mKey=&key;
mValue=&val;
};
元组(常量K和键)
{
mKey=&key;
};
常数K&getKey()
{
返回*mKey;
};
常量V&getValue()
{
return*mValue;
};
无效设置键(常数K和键)
{
mKey=&key;
};
无效设置值(常数V&val)
{
mValue=&val;
};
布尔运算符<(元组和t)
{
返回*mKeycount(tmp)!=0)
{
typename集::迭代器;
it=mTupleMap->find(tmp);
(*it).设定值(val);
}
其他的
{
mTupleMap->insert(tmp);
}
}
常量V和getValue(常量K和键)
{
设置tmp(键);
如果(mTupleMap->计数(tmp)!=0)
{
typename集::迭代器;
it=mTupleMap->find(tmp);
return(*it).getValue();
}
返回NULL;
}
};
int main()
{
地图地图;
插入(1,'a');
插入(2,'b');
插入(1,'c');
你的tmp
是元组
,但是你的集合
包含元组
,你有操作符你的tmp
是元组
,但是你的集合
包含元组
,你有操作符你是否包含字符串.h
和字符串
常量也许是ue?这就是include:#include#include#include在元组中存储指针会给晚餐带来麻烦,并告诉它带上所有facebook好友。你的地图条目都无效。@Ofiramov你使用的是std
,但不包括string
和string.h
?包括它们。你包括了吗destring.h
和string
?const
问题可能?这就是include:#include#include#在元组中存储指针会招来麻烦,并告诉它带上所有facebook好友。你的地图条目都无效。@Ofiramov你使用的是std
,但不包括de>string
和string.h
?包括它们..哇,我比我想的更蠢哈哈,谢谢它确实解决了这个问题,但现在它出现了这个错误:“stl_function.h | 237 | error:与'operatoroperator<不匹配,作为输入获取对元组的引用而不是指针,所以我称它的成员为”。“而且解引用不是必须的。不是吗?@OfirAbramov如果你试图比较值,你应该解引用指针。如果地址你不应该解引用。哇,我比我想的更傻哈哈,谢谢它确实解决了这个问题,但现在它犯了这个错误:“stl_function.h | 237 | error:与'operatoroperator<获取元组引用而不是指针作为输入不匹配,因此我用“.”来调用它的成员,并且解引用不是必需的。是不是?@Ofiramov如果您试图比较值,应该解引用指针。如果地址不应该解引用。