使用排序算法C
Using the sort algorithm C++
我正在阅读名称列表中,我想订购首先按字母顺序排列的姓氏。该文件将包含类似的内容
史密斯约翰467-604-4535
Kidd Jason 433-243-5252
etc
class record
{
bool operator <(const record &rhs) const
{
return (lastname < rhs.lastname)
}
private:
string fn, ln, pn;
};
int main(int argc, char *argv[])
{
record data;
ifstream fs;
fs.open(arg2.c_str());
vector<record> vec;
while (fs >> data)
{
vec.push_back(data);
}
fs.close();
sort (vec.begin(), vec.end(), data);
for (int i=0; i < vec.size(); i++)
cout << vec[i];
}
给我带来错误的代码行是排序(vec.begin(),vec.end(),data),它给我带来了很多错误。不过,我所知的其他一切都在起作用。这只是等。有什么想法,这是什么问题?如何对矢量进行排序?
std::sort()
在其第三个给定参数中调用 operator()
。它需要一个可呼出的对象(函数)用作排序的谓词。您的谓词不提供一个,因此是汇编错误。
但是std::sort
的详细信息指定如果您不提供自己的元素,则将在每个元素上使用operator<
:
std::sort(vec.begin(), vec.end());
要详细说明,有两个使用operator<
的std::sort
的两个过载,另一个使用自定义排序函数。
在第二次查看您的代码中,看来您仅在std::string
的右侧过载operator<
。您必须一次为两个一次录制对象的operator<
超载。
在课堂内您将其标记为friend
:
friend bool operator<(const record& lhs, const record& rhs)
{
return lhs.lastname < rhs.lastname;
}
使用
使用sort (vec.begin(), vec.end());
也不清楚该语句的含义
fs.open(arg2.c_str());
定义arg2在哪里?
您使用一对迭代器调用排序,((选项))可召唤对象,该对象知道如何比较您要排序的类型的两个项目。如果您不提供可选比较器,则排序将尝试在项目上使用operator<
。
请注意,比较器必须实施严格的弱排序。这意味着您的比较器必须完全一致。您的operator<
示例并不完全一致。如果您有两个具有相同姓氏的员工(例如,"史密斯,简"answers"史密斯,约翰"),您将无法简单地比较姓氏,因为您不会获得一致的结果。如果姓氏不告诉您哪一个是第一个来的,则必须比较名字。等等。这是一个例子:
struct comparator {
bool operator()(const record &lhs, const record &rhs) {
if (lhs.lastname < rhs.lastname) return true;
if (lhs.lastname == rhs.lastname) {
if (lhs.firstname < rhs.firstname) return true;
if (lhs.firthname == rhs.firstname) {
// ... compare other fields ..
}
}
return false;
}
};
没有严格的较弱的订购,您可能会很幸运(某些数据集可能会起作用),您可能会收到误差的数据,甚至可能崩溃。这取决于排序实现的详细信息以及您提供的特定数据集。
使用适当的函子进行比较,您可以称为Sorts:
sort(vec.begin(), vec.end(), comparator());
- C++选择排序算法中的逻辑错误
- 排序算法c++
- 下面是排序算法O(n)吗
- 为什么我的排序算法会更改数组值
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 排序算法问题(购买商店物品)(崩溃)
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 为什么在此排序算法实现中,向量明显比数组慢?
- C++ 多线程 - 与线程合并排序的算法替代
- C++中合并排序算法的奇怪行为
- 如果要求比较器是严格的总排序,而不仅仅是严格的弱排序,C++标准算法会更快吗?
- 我的排序算法程序中的堆错误
- 运行合并排序递归算法时EXC_BAD_ACCESS错误
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 解释一下这个排序算法是如何工作的?
- 检查向量是否使用除法和阻抗算法进行排序
- 使用sort()算法C 排序对象列表
- 算法排序1101001011
- 克鲁斯卡尔算法(排序)
- 用STL算法排序结构的动态数组