【发布时间】:2015-01-16 11:21:34
【问题描述】:
怎么办?找了很多例子,但是找不到带参数模板的例子。我不知何故没有工作比较器。
std::map<K, CacheEntry<T>*, Comparator<K, CacheEntry<T>>> timeMap_;
template<typename T1, typename T2>
struct Comparator
{
typedef std::pair<T1, T2> type;
bool operator()(const type& l, const type& r) const
{
auto nowTime = std::chrono::system_clock::now();
auto timeL = nowTime - l.second->creationTime();
auto timeR = nowTime - r.second->creationTime();
return (std::chrono::duration_cast<std::chrono::microseconds>(timeL).count() > std::chrono::duration_cast<std::chrono::microseconds>(timeR).count());
}
};
错误:
错误 1 错误 C2664: 'bool diadoc::cache::比较器 *>::operator ()(const std::pair &,const std::pair &) const' : 无法将参数 1 从 'const std::wstring' 转换为 'const std::pair &' c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility 521 1 DiadocClient
我尝试使用:
template<typename T1, class T2>
但它太不工作了。 按第二个参数map排序。
【问题讨论】:
-
您的示例中的
K是什么?无论如何,传递给std::map的比较器对象必须接受两个K类型的对象作为参数。你不能把模板参数切换到map吗? -
@Angew K - 是关键,但我不想按键排序。我需要对字段 creationTime_ 类 CacheEntry 进行排序。也就是说,我要对第二个字段进行排序。
-
这没有意义。
std::map按关键字排序,并利用其内容已排序这一事实来提供对数时间唯一性检查和访问。您能否清楚地说明您的要求:您的唯一性标准、排序标准、访问/修改时间复杂度标准是什么?你可能需要一个更复杂的容器,比如boost::multi_index。 -
有一个唯一的key,我们找到一个存储时间和值的对象。底线是,当我想删除最旧的成员时,我呼吁他 map.begin()。这个容器不适合我吗?
-
请尽量把要求表述得更清楚一些,并将它们添加到问题中;它将大大改善它(实际上是让它自己负责)。
标签: c++11 dictionary compare