0

我有一个结构,用户可以定义哪些字符串值放在哪里。我试过按字母顺序排序,但对我在网上找到的研究没有运气。我希望如果有人能看到我哪里出错了

正在使用的库:iostream、字符串、fstream 和算法

struct House
{
    int room_num;               
    string person;      
};

struct compare_by_word
{
    bool operator()(const House& lhs, const House& rhs)
    {
        return lhs.person < rhs.person;
    }
};

顺便说一句,我在使用 Visual Studios 2010 时遇到了错误

  void asc_order()
    {
        sort(data.begin(), data.end(), compare_by_word());
//for loop will be displayed here to show table
    }

我得到的错误:

错误:标识符数据未定义

struct compare_by_word 错误:不允许类型名称

4

4 回答 4

2

您将类型作为比较器传递。您需要将对象作为compare_by_word比较器传递给sort.

于 2013-03-31T21:42:24.720 回答
1

您需要传递compare_by_word. 这是通过调用其构造函数来完成的:

std::sort(data.begin(), data.end(), compare_by_word());
//                                  ^^^^^^^^^^^^^^^^^

现场演示

我还看到您没有使用任何引入带有beginorend方法的对象的头文件进行编译。这些通常用于向量和其他动态容器。所以我认为你应该尝试传递地址范围作为可行的替代方案:

std::size_t len = sizeof(data)/sizeof(*data);

std::sort(data, data + len, compare_by_word());

现场演示

或者,如果你在 C++11 中编译,你可以传递一个lambda回调来代替显式仿函数,并使用beginend库函数而不是地址范围:

using std::begin;
using std::end;

std::sort(begin(data), end(data), [] (House const& lhs, House const& rhs)
{
    return lhs.person < rhs.person;
});

现场演示

于 2013-03-31T21:43:27.087 回答
0

另一种选择是

struct compare_by_word
{
    bool operator()(const House& lhs, const House& rhs)
    {
        return lhs.person < rhs.person;
    }
} compare_by_word;  // Here.
于 2013-03-31T21:45:41.237 回答
0

排序语句中有错误。将其替换为:

sort(&data[0],&data[5],compare_by_word());

IDEONE 演示

于 2013-03-31T21:50:49.883 回答