-2

现在我完全糊涂了。我整天都在谷歌搜索,但仍然不明白为什么这段代码不起作用。

我有,vector那些structs有财产。当我想在 中添加一个新的时,首先我必须检查具有相同属性的 a 是否已经存在。如果是,则不会添加。structsstringstructvectorstructstring

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Try{
    string name;
    Try( string name) : name ( name ) { }
    bool                operator <                  ( const Try & a ) const
    {
        return name < a . name;
    }
};


int main(){

    vector<Try> vektor;
    Try *n;

    vektor . push_back( Try( "Prague" ) );

    n = new Try( "Brno" );


    vector<Try>::iterator it = lower_bound( vektor . begin(), vektor . end(), n -> name);

    if( it == vektor . end() ){
        cout << "not included" << endl;
        cout << it -> name << endl;
    }
    else
        cout << "included" << endl;

    return 0;
}
4

1 回答 1

1

尝试使用标准的变体这个函数binary_search()。如果在范围内找到值,则返回匹配元素(“最低”元素)的迭代器,如果没有匹配,则返回等于last(通常end())的迭代器:

template< class ForwardIt, class T >
ForwardIt binary_search_ex(ForwardIt first, ForwardIt last, const T& value)
{
    ForwardIt it = std::lower_bound(first, last, value);

    if ((it != last) && (value < *it)) it = last;

    return it;
}
于 2016-03-28T19:15:25.347 回答