gpt4 book ai didi

c++ - 语法 : doing binary_search (STL) for sorted vector of pointers to struct

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:00 26 4
gpt4 key购买 nike

很抱歉,如果这是一个菜鸟问题,但即使在阅读了一堆文档和论坛帖子之后,我似乎还是无法编译它:

基本上,我有这个结构:

struct Entry{
unsigned long long time;
// other things...
};

我已经成功创建了一个 vector<Entry*> timestampSearch .

timestampSearch 已经排序,我很确定成功,基于成员变量 unsigned long long time在每个 Entry 类型的对象中timestampSearch 的每个元素指向。

FWIW,它是通过 <algorithm> 排序的的 std::sort 函数,使用这个谓词:

// time compare predicate/functor to sort by timestamp   
struct cmp_time_cat_entryID{
inline bool operator() (Entry* entry1, Entry* entry2) const{
if (entry1->time == entry2->time){
if (entry1->category_lower == entry2->category_lower){
return (entry1->entryID < entry2->entryID);
}
else{
return (entry1->category_lower < entry2->category_lower);
}
}
return (entry1->time < entry2->time);
}
};

...然后这样调用:

sort(timestampSearch.begin(), timestampSearch.end(), cmp_time_cat_entryID());

因此,当需要使用 binary_search timestampSearch 时,我认为调用 STL binary_search 的语法与 STL sort 非常相似,并尝试这样调用它:

    bool time1present = false;
unsigned long long time1 = 0425215422

time1present = binary_search(timestampSearch.begin(),
timestampSearch.end(),
time1,
cmp_time());

...使用一个非常相似的谓词可能(?)节省几个周期:

struct cmp_time{
inline bool operator() (Entry* entry1, Entry* entry2) const{
return (entry1->time == entry2->time);
}
};

但是,我遇到了这个编译错误:

    Error   1   error C2664: 
'bool cmp_time::operator ()(Entry *,Entry *) const' :
cannot convert argument 1 from 'const unsigned __int64' to 'Entry *'

c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2666 1 test_unordered_map

谁能帮我解决这个问题并让 binary_search 正常工作?

最佳答案

您的二进制搜索比较函数在 Entry 对象之间进行比较,而您传递的是 unsigned long long 类型(无法转换为 Entry* ).

创建 Entry 对象的新实例(要搜索的对象)并将其传递给 binary_search 函数或创建适当的比较函数。

bool operator()(unsigned long long time, const Entry* ob)
{
return time == ob->time ;
}

在C++11及更高版本中,您还可以使用lambda表达式作为比较函数。

关于c++ - 语法 : doing binary_search (STL) for sorted vector of pointers to struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30696101/

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