如何解决C ++:有没有一种方法可以将各种变量类型的列表合并为一个?
以下是用Kotlin编写的所需功能:
// these 3 classes inherit from MenuItem class
val subOptions: MutableList<MenuOption> = mutablelistof(),val entries: List<MenuEntry> = emptyList(),val actions: List<MenuAction> = emptyList()
fun getorderedMenuItems(): List<MenuItem> = entries.plus(actions).plus(subOptions)
是否可以使用std :: list或某些其他类型的容器来解决此问题?如果没有,该如何翻译?任何提示将不胜感激。
@edit
也许我没有说清楚。基本上,我想将这些列表连接到一个列表中。我试图像这样使用splice()和merge():
list<MenuItem> mergedList = list<MenuItem>();
mergedList.splice(mergedList.end(),actions);
我明白了:
没有重载函数“ std :: __ cxx11 :: list <_tp> :: splice [带有_Tp = MenuItem,_Alloc = std :: allocator]的实例”与参数列表匹配-参数类型为:((std :: _ List_iterator,std :: __ cxx11 :: list
)-对象类型为:std :: __ cxx11 :: list
这是给我带来麻烦的方法:
list<MenuItem> MenuOption::getorderedMenuItems() {
list<MenuItem> mergedList = list<MenuItem>();
for(MenuItem const& i : actions) {
mergedList.push_back(i);
}
for(MenuItem const& i : subOptions) {
mergedList.push_back(i);
}
for(MenuItem const& i : entries) {
mergedList.push_back(i);
}
return mergedList;
}
解决方法
您需要使用 pointers 的向量(或列表,但这是一个次等选择)(智能或其他方式;应该首选智能指针,但为简洁起见,我不展示它们)。 >
std::vector<MenuItem*> out;
// these 3 classes inherit from MenuItem class
std::vector<MenuOption*> subOptions;
std::vector<MenuEntry*> entries;
std::vector<MenuAction*> actions;
out.insert(out.end(),entries.begin(),entries.end());
out.insert(out.end(),actions.begin(),actions.end());
out.insert(out.end(),subOptions.begin(),suboptions.end());
如果需要排序的向量,则可以std::sort
out
向量。如果您对原始向量进行排序的话,也可以使用std::merge
。您可能需要将自定义比较器传递给任何一个函数,否则它们将比较指针,这可能不是您想要的。
有关更多信息,请参见this question and answer。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。