对自己创建的类对象进行不区分大小写的排序

时间:2017-03-15 14:20:02

标签: c++ class sorting

我创建了一个名为Person的类,由其他类组成Name和Adress。 Person类的对象存储在名为personList的向量中。一切正常,但我的排序方法!

我需要能够按字母顺序对矢量进行排序,首先是按名称&如果名称相似,则按地址。我现在的问题是,无论如何我都想不出让搜索不区分大小写。

会给予任何帮助!我刚开始学习C ++。

这是我的排序功能代码:

 bool sortByName(const Person & lhs, const Person & rhs)
{
    if (lhs.getName() == rhs.getName())
        return lhs.getAdress() < rhs.getAdress();
    else 
        return lhs.getName() < rhs.getName();
}

2 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是operator<()实施Person而不是sortByName()例程:

bool operator<(const Person& lhs, const Person& rhs)
{
   ...
}

从那里你可以使用各种技术来比较你的两个Person对象,只要ordering is always the same。有关一种解决方案,请参阅Case insensitive string comparison in C++

转换任意字符串的情况非常复杂(甚至可能是边界线不可能),如果您想在所有情况下都能正常工作,例如任何语言。您可以通过执行不区分大小写的比较而不是转换来支持其中一些操作;但仍有很多问题。有了“仅英文”或“只是ASCII字符”等附加限制,这就容易多了。

答案 1 :(得分:-1)

你的getName()函数可以返回名称的小写而不是实际存储的内容(或者只为排序部分使用替代的getName().fower函数(http://www.cplusplus.com/reference/cctype/tolower/)仅适用于一次只有一个字符,所以你必须遍历整个名字。但是也有一个解决方案(How to convert std::string to lower case?

/