C++ 使用struct作为map中的键
我现在使用的是一个带有时间定义的“tm结构”键的地图 语句C++ 使用struct作为map中的键,c++,c++11,C++,C++11,我现在使用的是一个带有时间定义的“tm结构”键的地图 语句it=HashTime.find(tm结构对象)当它是迭代器时,我得到如下错误: 在'((const-CTime*)this)->CTime::HashTime.std::map::find[with(with)Key=tm,_-Tp=long int,_-Compare=CTime::Compare,_-Alloc=std::分配器,std::map::const\u迭代器=std:(const-std::map::Key\u-type
it=HashTime.find(tm结构对象)代码>当它是迭代器时,我得到如下错误:
在'((const-CTime*)this)->CTime::HashTime.std::map::find[with(with)Key=tm,_-Tp=long int,_-Compare=CTime::Compare,_-Alloc=std::分配器,std::map::const\u迭代器=std:(const-std::map::Key\u-type&&)((const-std::map::Key\mdu-type&)m*))=m_datesec'
这可能会帮助您:
#include <iostream>
#include <map>
struct valueInfo
{
int value1;
int value2;
int value3;
valueInfo(const int A,const int B,const int C) :
value1(A),value2(B),value3(C) {}
};
class valueComp
{
public:
bool operator()(const valueInfo& A,
const valueInfo& B)
const
{ return A.value2<B.value2; }
};
typedef std::map<valueInfo,double,valueComp> MapCTYPE;
int
main()
{
MapCTYPE TMap;
valueInfo B(1,2,3);
valueInfo C(3,3,4);
TMap.insert(MapCTYPE::value_type(B,4.5));
TMap.insert(MapCTYPE::value_type(C,8.4));
MapCTYPE::iterator vc=TMap.find(MapCTYPE::key_type(1,2,8));
if (vc!=TMap.end())
{
std::cout<<"Success:"<<vc->second<<std::endl;
}
}
#包括
#包括
结构值信息
{
int值1;
int值2;
int值3;
valueInfo(常数A、常数B、常数C):
价值1(A)、价值2(B)、价值3(C){}
};
类值比较
{
公众:
布尔运算符(),
const valueInfo酒店
常数
{返回A.value2it
和HashTime
的类型是什么?如果使用auto it=HashTime.find(…),它是否有效事实上我对C++有点新的东西,实际上我对C++有点新,实际上我对C++有点新,所以这是我编的,你能编辑你的文章并添加你的代码吗?谢谢你的文章已经解决了我的操作员超载错误。这就是我写的:ValueMaTimeTime:StultTM和Trf。{it=HashTime.find(trf);if(it==HashTime.end()){m_datesec=mktime(&trf);HashTime[trf]=m_datesec;}else{HashTime.find(trf);}}private:map HashTime;map::iterator it;long int m_datesec;};但我得到了一个错误:对'Time::MakeTime(tm*)的调用没有匹配的函数,我正在用strtime(strDate.c_str(),strFormat.c_str(),&m_tmDate)调用其他头文件中的MakeTime函数;struct tm trf=m_tmDate;cobj.MakeTime(&trf);其中m_tmDate是另一个tm结构,为其每个变量设置了一些值。valueComp是带有bool运算符()的类(const tm&A,const tm&B),const和cobj是时间类的对象。。