小编Dos*_*ora的帖子

用于在已排序数据中快速插入和随机访问的数据结构

p = random_point(a,b)
#random_point() returns a tuple/named-tuple (x,y)
#0<x<a 0<y<b
if centers.validates(p):
    centers.insert(p)
#centers is the data structure to store points
Run Code Online (Sandbox Code Playgroud)

在centers数据结构中,所有x和y坐标都存储在两个单独的排序(升序)列表中,一个用于x,另一个用于y.每个节点都x指向相应的y,反之亦然,这样它们可以单独排序并仍保持对属性:centers.get_x_of(y)和centers.get_y_of(x)

在此输入图像描述

我在数据结构中需要的属性:

  1. 快速插入,已经排序的数据(最好是log n)
  2. 随机访问
  3. 分别对x和y排序,而不会丢失对属性

最初我想过使用simple Lists,并使用Binary search来获取插入任何新元素的索引.但我发现,使用像AVL或B树这样的自平衡树可以改善它.我可以让每两个树木x和y,与具有额外的指针,可以从X-树节点为y树节点指向每个节点.

但我不知道如何在这些树中构建随机访问功能.该函数centers.validate()尝试插入x&y,并对相邻元素运行一些检查,这需要随机访问:

def validate(p):
    indices = get_index(p)
    #returns a named tuple of indices to insert x and y, Eg: (3,7)
    condition1 …
Run Code Online (Sandbox Code Playgroud)

python tree list data-structures python-3.x

8
推荐指数
1
解决办法
254
查看次数

无法在派生类函数内部访问基类的受保护数据成员

#include <iostream>
#include <cmath>
using namespace std;

class Point
{
    protected:
        double x,y,z;
        double mag;
    public:
        Point(double a=0.0, double b=0.0, double c=0.0) : x(a), y(b), z(c)
        {
            mag = sqrt((x*x)+(y*y)+(z*z));
        }
        friend ostream& operator<<(ostream& os, const Point& point);
};

ostream& operator<<(ostream& os, const Point& point)
{
    os <<"("<<point.x<<", "<<point.y<<", "<<point.z<<") : "<<point.mag;
    return os;
}

class ePlane : public Point
{
    private:
        Point origin;
    public:
        static double distance(Point a, Point b);
        ePlane() : origin(0,0,0){}
};

double ePlane::distance(Point a, Point b) …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance protected c++11

3
推荐指数
1
解决办法
300
查看次数

MFC 对话窗口不出现

我刚刚学习在 Visual Studio 2017 中创建 MFC 应用程序。我已经创建了一个基于 MFC 对话框的应用程序的新默认项目。完成 MFC 应用程序向导的步骤后,visual studio 显示如下:

状态.

在这一点上,我没有更改任何代码或设置。

现在我如何获得对话框窗口,如下所示:

这里

我试过重建解决方案,但它不起作用。

c++ mfc visual-c++ visual-studio-2017

2
推荐指数
1
解决办法
2175
查看次数