gpt4 book ai didi

c++ - 使用 std::tm 作为 std::map 中的键

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:31 26 4
gpt4 key购买 nike

我想使用 std::tm () 作为 std::map 容器的键。但是当我尝试编译它时,出现了很多 (10) 个错误。

例如:

1.

error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const tm' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional 125

2.

error C2784: 'bool std::operator <(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const _Elem *' from 'const tm' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional 125

3.

error C2784: 'bool std::operator <(const std::vector<_Ty,_Ax> &,const std::vector<_Ty,_Ax> &)' : could not deduce template argument for 'const std::vector<_Ty,_Ax> &' from 'const tm' c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional 125

这是否意味着我“简单地”必须创建一个比较两个 std::tm 的函数对象,因为没有为此定义标准比较?还是另有妙招? (或者这对我来说甚至是不可能的?^^)

代码:

#include <map>
#include <ctime>
#include <string>


int main()
{
std::map<std::tm, std::string> mapItem;
std::tm TM;

mapItem[TM] = std::string("test");
return 0;
};

最佳答案

std::map使用比较器检查 key 是否已经存在。所以当你使用 std::tm ,您还必须提供一个比较器作为第三个参数。

template < class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key,T> > > class map

所以一个解决方案是仿函数(正如您已经猜到的那样):

struct tm_comparer
{
bool operator () (const std::tm & t1, const std::tm & t2) const
{ //^^ note this

//compare t1 and t2, and return true/false
}
};

std::map<std::tm, std::string, tm_comparer> mapItem;
//^^^^^^^^^^ pass the comparer!

或者定义一个自由函数(operator <)为:

bool operator < (const std::tm & t1, const std::tm & t2)
{ // ^ note this. Now its less than operator

//compare t1 and t2, and return true/false
};

std::map<std::tm, std::string> mapItem; //no need to pass any argument now!

关于c++ - 使用 std::tm 作为 std::map 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5979121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com