在stl set中设置lower_bound

时间:2012-03-22 17:26:04

标签: c++ stl set

我想为多个结构集设置lower_bound和upper_bound来迭代一个范围。如何为字符串正确设置?

#include ...
...    
struct foo{
    int bar;
    string test;
};

struct comp{
    inline bool operator()(const foo& left,const foo& right){
        return strcasecmp(left.test.c_str(), right.test.c_str());
    }
};

int main(){
    std::multiset<foo,comp> fooset;
    std::multiset<foo,comp>::iterator it, itLow;

    ...//insert into fooset

    //how do set lower_bound to element where string is "aab" or whatever?

    return 0;
}

如何设置itLow指向带有&#34; ab&#34;?

的字符串测试的元素

我试过了:

itLow = fooset.lower_bound("string");

我知道这还不够......但我不确定该怎么做。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要从字符串构建foo,然后使用lower_bound(或upper_bound,视情况而定)搜索位置:

struct foo {
    int bar;
    string test;

    foo(string i) : test(i) {}
};

std::multiset<foo, comp> fooset;

std:multiset<foo,comp>::iterator it = 
    std::lower_bound(fooset.begin(), fooset.end(), foo("string"), comp());