gpt4 book ai didi

C++ - 使用额外参数排序

转载 作者:行者123 更新时间:2023-11-28 07:04:41 25 4
gpt4 key购买 nike

我正在使用邻接表和使用以下类型定义定义的映射:

typedef vector<list<Edge> > adjacencyList;
typedef map<int,WikiPage> idToWikiMap;

我想按名称对邻接表 (adjacencyList) 进行排序。 adjacencyList 的索引映射到我的 map 中的一对。例如,

adjacencyList lst;

lst[0] = NULL
lst[1] = list of edges related to City1
lst[2] = list of edges related to City2

idToWikiMap mymap;

mymap[1] -> Name of City1
mymap[2] -> Name of City2

所以我想使用映射中与邻接表的索引相关的名称对邻接表进行排序。我想出了以下代码。因为我的比较函数需要 map ,所以我不能只创建一个普通函数。所以我使用了 structLocal

比较有效。我可以cout 当前正在比较的列表的名称和返回值。例如,我得到

Comparing Chicago and  New York
Smaller: 0
Comparing Montreal and Chicago
Smaller: 1
Comparing Montreal and New York
Smaller: 0
Comparing Toronto and Chicago
Smaller: 1
Comparing Toronto and Montreal
Smaller: 1
Comparing Toronto and New York
Smaller: 1
Comparing Miami and Chicago
Smaller: 1
Comparing Miami and Montreal
Smaller: 0

然而,原始文件并没有被修改......我做错了什么吗?

  void printOrganized(adjacencyList& lst, idToWikiMap page_ofID) {
// Define compare functions that accepts idToWikiMap parameter
struct Local {
Local(idToWikiMap mymap) { this->mymap = mymap; }

bool operator() (const list<Edge>& l1, list<Edge>&l2)
{ return mymap.at(l1.front().origin).title < mymap.at(l2.front().origin).title; }

idToWikiMap mymap;
};

/* Sort adjacenyList lst */
sort (lst.begin()+1, lst.end(), Local(page_ofID));

...
}

最佳答案

在我修复编译错误后,您的代码对我来说运行良好。也许您的编译器没有报告此错误,但它导致您的代码无法运行?

无论如何,错误出在比较函数中 - 您应该将两个参数都作为常量引用获取,即

bool operator() (const list<Edge>& l1, const list<Edge>& l2)

此外,我必须将 Local 移动到全局范围,因为只要它是在函数内部定义的,它就对我不起作用。您可以在此处查看工作结果:http://ideone.com/e.js/UPMeFm

关于C++ - 使用额外参数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com