当前位置: 首页 > 知识库问答 >
问题:

模板比较迭代器

陶鸿畴
2023-03-14

我有一个类,声明如下:comparator:

    template <typename _Type, typename _Comparator = std::equal_to<typename _Type::value_type> >
        class CSearch {
public:    
    CSearch() : comp(_Comparator()) {
    };

    CSearch(const _Comparator &_cmp) : comp(_cmp) {
    };
    void Add(int id, const _Type & needle);
    set<int> Search(const _Type & hayHeap) const;    
protected:
    _Comparator comp;
    vector<pair<int, _Type> > m_Db;
};

template <typename _Type, typename _Comparator>
void CSearch<_Type, _Comparator>::Add(int id, const _Type& needle) {
    m_Db.push_back(pair<int, _Type>(id, needle));
}

template <typename _Type, typename _Comparator>
set<int> CSearch<_Type, _Comparator>::Search(const _Type & hayHeap) const {
    set<int> s_search; 
    typename vector< pair<int, _Type> >::const_iterator it;
    typename _Type::const_iterator hayStackIterator;

    for (hayStackIterator = hayHeap.begin(); hayStackIterator != hayHeap.end(); ++hayStackIterator){        
        for(it=m_Db.begin(); it!=m_Db.end(); ++it){
            if(comp(*it, *hayStackIterator))
                s_search.insert(it->first);                
        }
    }
    return s_search;
}

//-------------------
int main(int argc, char** argv) {

    CSearch <string> test1;
    test1 . Add    ( 0, "hello" );
    test1 . Add    ( 1, "world" );
    test1 . Add    ( 2, "rld" );
    test1 . Add    ( 3, "ell" );
    test1 . Add    ( 4, "hell" );
    printSet ( test1 . Search ( "hello world!" ) );
    // 0, 1, 2, 3, 4
    printSet ( test1 . Search ( "hEllo world!" ) );
    // 1, 2

    CSearch <string, bool (*)(const char &, const char &)> test2 ( upperCaseCompare );
    test2 . Add    ( 0, "hello" );
    test2 . Add    ( 1, "world" );
    test2 . Add    ( 2, "rld" );
    test2 . Add    ( 3, "ell" );
    test2 . Add    ( 4, "hell" );
    printSet ( test2 . Search ( "HeLlO WoRlD!" ) );
    // 0, 1, 2, 3, 4
    printSet ( test2 . Search ( "hallo world!" ) );
    // 1, 2

    CSearch <string, CharComparator> test3 ( CharComparator ( false ) );
    test3 . Add    ( 0, "hello" );
    test3 . Add    ( 1, "world" );
    test3 . Add    ( 2, "rld" );
    test3 . Add    ( 3, "ell" );
    test3 . Add    ( 4, "hell" );
    printSet ( test3 . Search ( "heLLo world!" ) );
    // 0, 1, 2, 3, 4
    printSet ( test3 . Search ( "Well, templates are hell" ) );
    return 0;

}

搜索功能不转换条件:

if(comp(*it, *hayStackIterator))...

你能帮忙吗?

翻译错误:

main.cpp:101:44:从这里实例化 main.cpp:55:13: 错误: 与调用 '(const std::equal_to) 不匹配(const std::p air

共有1个答案

景光赫
2023-03-14

错误信息非常清楚。

if(comp(*it, *hayStackIterator))

*它具有类型标准::p空气

 类似资料:
  • 问题内容: 我有以下模板: 我在执行模板时传递了一个字符串。 但是,出现以下错误: 如何比较模板中的字符串? 问题答案: 是函数,而不是运算符。它以以下形式调用:(不是)。 您可以通过将操作数从的侧面移动到之后来修复模板:

  • 有人能解释一下这个结果吗? 这是我的代码: 结果是: 首先: 这很奇怪,因为我只声明了一个模板类“T”。第一个比较结果为false,因为val1是long,val2是int(我已经通过debuger进行了检查)。但不应该是这样,因为我只声明了一个模板类,并且两个模板类都是相同的。 和 第二: 为什么每个大于127的“长”大数都不相等?? 谢啦!

  • 我有两个基于同一ecore模型的EMF实例版本。我需要以以下格式准备一个从v1到v2更改的事物列表

  • 问题内容: 在传递给模板的数据中,我有两个变量,我想进行比较以为select字段预选择一个选项。 为了说明我的问题,我创建了这个简化的版本: 它应该选择选项,但只会产生错误 当我只比较两个正常的字符串时,它可以工作,但是我想知道是否有一种方法。我已经看到您可以向模板添加功能,但是我认为必须有一种更简单的方法。 问题答案: 问题在于,即使您在这种情况下使用循环变量(和),操作也会更改(设置)点()。

  • 问题内容: 给定我有两个变量,它们的值分别为“ test”和“ test”。在jinja2中,当我尝试使用if比较它们时,没有任何显示。我做如下比较: 我得到的输出怎么了,我该如何比较? 问题答案: 只需使用诸如或https://stackoverflow.com/a/19993378/1232796的过滤器 在你的情况下,你想做

  • 问题内容: 我想将日期与Django中的当前日期进行比较,最好是在模板中进行比较,但是也可以在渲染模板之前进行比较。如果日期已经过去,我想说“过去”,而如果将来,我想说出日期。 我希望有人可以做这样的事情: 现在是今天,但是这不起作用。我在Django文档中找不到有关此的任何内容。任何人都可以给点建议吗? 问题答案: 比较视图中的日期,然后将类似(boolean)的值传递给extra_contex