微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++:有没有一种方法可以将各种变量类型的列表合并为一个?

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?