Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 扩展标准::无序集合<&燃气轮机;用于std::stack<&燃气轮机;_C++_C++11_Stl_Stack_Unordered Set - Fatal编程技术网

C++ 扩展标准::无序集合<&燃气轮机;用于std::stack<&燃气轮机;

C++ 扩展标准::无序集合<&燃气轮机;用于std::stack<&燃气轮机;,c++,c++11,stl,stack,unordered-set,C++,C++11,Stl,Stack,Unordered Set,我的问题是:我想使用std::stackstd::stack是一种按照后进先出原则排序的数据结构。在该意图中,它将数据按特定顺序放入底层容器,并期望该容器保持该顺序。不可能将任何会自动更改订单的容器用作基础容器。消除了任何无序的数据结构或根据某些其他原则排序的数据结构 但是,该逻辑仅在您希望维护上述std::stack的意图时适用,即使用它来实现堆栈 如果您不在乎最终得到什么(在最极端的情况下,如果您只想让代码“编译”),那么您可以将std::stack视为一个“瘦”抽象接口适配器,它只不过是调

我的问题是:我想使用
std::stack
std::stack
是一种按照后进先出原则排序的数据结构。在该意图中,它将数据按特定顺序放入底层容器,并期望该容器保持该顺序。不可能将任何会自动更改订单的容器用作基础容器。消除了任何无序的数据结构或根据某些其他原则排序的数据结构

但是,该逻辑仅在您希望维护上述
std::stack
的意图时适用,即使用它来实现堆栈

如果您不在乎最终得到什么(在最极端的情况下,如果您只想让代码“编译”),那么您可以将
std::stack
视为一个“瘦”抽象接口适配器,它只不过是调整某个底层类的接口。从这个角度来看,您完全可以使用任何东西作为底层“容器”,只要它满足所需的接口规范。据我所知,这包括可用的
大小
后退
后推
后推
方法,可能还有一些typedef


无序集
,正如您可能已经注意到的,不满足所需的接口规范。您可以正式地“扩展”它,只是“使其可编译”,但我不知道如何才能使它在真正的堆栈中工作。

std::stack
是一种按照后进先出原则排序的数据结构。在该意图中,它将数据按特定顺序放入底层容器,并期望该容器保持该顺序。不可能将任何会自动更改订单的容器用作基础容器。消除了任何无序的数据结构或根据某些其他原则排序的数据结构

但是,该逻辑仅在您希望维护上述
std::stack
的意图时适用,即使用它来实现堆栈

如果您不在乎最终得到什么(在最极端的情况下,如果您只想让代码“编译”),那么您可以将
std::stack
视为一个“瘦”抽象接口适配器,它只不过是调整某个底层类的接口。从这个角度来看,您完全可以使用任何东西作为底层“容器”,只要它满足所需的接口规范。据我所知,这包括可用的
大小
后退
后推
后推
方法,可能还有一些typedef


无序集
,正如您可能已经注意到的,不满足所需的接口规范。您可以正式地“扩展”它,只是“使其可编译”,但我不知道如何才能使它适用于真正的堆栈。

正如在另一个回答中所解释的,无序集不是堆栈接口的合适容器,因为提供的容器应该提供排序语义。无序集不提供排序语义,如其名称所示

看起来您想要的是后进先出的数据结构,但您希望能够在O(1)中找到该数据结构中的特定元素,并对其进行操作(我猜是找到并删除它)

您可能能做的最好的事情是您自己的数据结构,它有一个使用列表的堆栈,以及到该列表的迭代器的无序坐标映射

class MyFunkyStack {
    std::list<coord> list_;
    std::stack<coord, std::list<coord>> stack_;
    std::unordered_map<coord, std::list<coord>::iterator> map_;
    //...

    MyFunkyStack () : list_(), stack_(list_), map_() {}

    coord top () const { return stack_.top(); }

    void push (coord c) {
        stack_.push(c);
        map_[c] = list_.end() - 1;
    }

    void pop () { erase(top()); }

    void erase (coord c) {
        std::unordered_map<coord, std::list<coord>::iterator>::iterator i;
        if ((i = map_.find(c)) == map_.end()) return;
        list_.erase(i->second);
        map_.erase(i);
    }

    //...

};
类MyFunkyStack{
std::列表;
std::stack-stack;
std::无序地图;
//...
MyFunkyStack():列表(),堆栈(列表),映射({}
coord top()常量{return stack_uuz.top();}
无效推送(坐标c){
堆栈推送(c);
map_uC]=列表_uC.end()-1;
}
void pop(){erase(top());}
无效擦除(坐标c){
std::无序_映射::迭代器i;
if((i=map.find(c))==map.end())返回;
清除列表(i->秒);
地图删除(i);
}
//...
};
向B-52道歉:
如果在归档的系统日志中看到一条旧的日志行,其中显示:/ “哈希堆栈中有15 MB”/ 散列堆栈,是的,是的// 我正在下载一个开源项目/ 在找哈什·阿伊·泰伊/ 今天编译哈希表// 我买了一个焦油球,它太大了,不适合发电子邮件/ 我们正在为我的哈希堆栈下载它// 我买了一个编译器,它优化了很多/ 所以赶快准备好你的构建箱吧// 散列堆栈是我们一起制作的一个奇怪的容器/ 散列堆栈,宝贝(散列堆栈宝贝!)// 散列堆栈,宝贝,散列堆栈/ 散列堆栈,宝贝,散列堆栈// (哈什,宝贝,它就在那儿。)/ (哈什,宝贝,它就在那儿。)// 许可证是开源的/ 因为共享对于散列堆栈来说很酷// 这只是一个小类,只有几个字段/ 这是一个奇怪的时髦堆栈,有点像黑客// 不需要析构函数/ 不需要分配任务/ 不需要移动或复制/ 不需要分配任务// 散列堆栈是我们一起制作的一个奇怪的容器/ 散列堆栈,宝贝(散列堆栈宝贝!)// (哈什,宝贝,它就在那儿。)/ (哈什,宝贝,它就在那儿。)// 打字和鼠标移动/ 思考和a编码/ 几乎什么都没穿/ 因为我在家工作(是的)// 哈希堆栈编译/ 哈希堆栈编译// 哈希堆栈编译/ 而其他堆栈仍然只是/ 阵列,阵列,阵列,阵列,阵列// 其他堆栈只是推动,其他堆栈只是弹出,宝贝/ 最后排队的是第一个出来的// 其他堆栈只是推动,其他堆栈只是弹出,宝贝/ 一堆奇怪的时髦货/ 一堆奇怪的时髦货// 当我编译时(依赖项过时)