Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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++ 对2dim向量进行排序并保留索引_C++_Arrays_Vector - Fatal编程技术网

C++ 对2dim向量进行排序并保留索引

C++ 对2dim向量进行排序并保留索引,c++,arrays,vector,C++,Arrays,Vector,我填充了一个2dim向量,如下所示: vector< vector<double>> save; for ( int i=0;i<5;i++ ) { for ( int j=0;j<5;j++ ) { save[i][j]=i*(i+j); } } vectorsave; 对于(int i=0;i,您可以使用数字到其索引的哈希映射。类似于: std::map< double, std::list<in

我填充了一个2dim向量,如下所示:

vector< vector<double>> save;
for ( int i=0;i<5;i++ )
{
    for ( int j=0;j<5;j++ )
    {
        save[i][j]=i*(i+j);

    }
  }
vectorsave;

对于(int i=0;i,您可以使用数字到其索引的哈希映射。类似于:

std::map< double, std::list<int> > indices;
std::map索引;

另外,考虑到两个浮点数之间的比较是近似的这一事实。

我会这样做

// Create a structure to manage co-ordinates, values, and 1d-indices.
// These are the components you're actually interested in.
struct PointValue
{
    PointValue(int x, int y, int value)
        : x(x), y(t), value(value), indexOneDimensional(x*(x+y))
    {}
    int x, y, indexOneDimensional;
    int value;
    // Sort predicate for sorting these PointValue objects.
    static bool SortFunction(const PointValue& left, const PointValue& right)
    {
        return left.value < right.value;
    }
};
typedef std::vector<PointValue> PointValueList;


int sizeX = 100; int sizeY = 100;
PointValueList myValues(sizeX * sizeY);

// Create a 100x100 array with random values for each point.
for (int i = 0; i < sizeX; i++)
{
    for (int j = 0; j < sizeY; j++)
    {
        myValues.push_back(PointValue(i, j, rand()));
    }
}

// Sort using our static predicate.
std::sort(myValues.begin(), myValues.end(), PointValue::SortFunction);

// Print 1d-indices.
std::for_each(m_values.begin(), m_values.end(), [](const PointValue& val) {
    printf("Index is: %d. Value is: %d", val.indexOneDimensional, val.value);
});
//创建一个结构来管理坐标、值和1d索引。
//这些是您真正感兴趣的组件。
结构点值
{
点值(整数x,整数y,整数值)
:x(x),y(t),值(value),指数(x*(x+y))
{}
int x,y,指数内维度;
int值;
//排序谓词,用于对这些PointValue对象进行排序。
静态布尔排序函数(常量PointValue和左、常量PointValue和右)
{
返回left.value
例如,8的索引是4和4。你是什么意思?你想为以前的值存储两组数据吗?@Aesthete:我的意思是,例如这里save[1][1]=2,我想在排序后保留i和j的值,它们是1和1(它们属于2)
// Create a structure to manage co-ordinates, values, and 1d-indices.
// These are the components you're actually interested in.
struct PointValue
{
    PointValue(int x, int y, int value)
        : x(x), y(t), value(value), indexOneDimensional(x*(x+y))
    {}
    int x, y, indexOneDimensional;
    int value;
    // Sort predicate for sorting these PointValue objects.
    static bool SortFunction(const PointValue& left, const PointValue& right)
    {
        return left.value < right.value;
    }
};
typedef std::vector<PointValue> PointValueList;


int sizeX = 100; int sizeY = 100;
PointValueList myValues(sizeX * sizeY);

// Create a 100x100 array with random values for each point.
for (int i = 0; i < sizeX; i++)
{
    for (int j = 0; j < sizeY; j++)
    {
        myValues.push_back(PointValue(i, j, rand()));
    }
}

// Sort using our static predicate.
std::sort(myValues.begin(), myValues.end(), PointValue::SortFunction);

// Print 1d-indices.
std::for_each(m_values.begin(), m_values.end(), [](const PointValue& val) {
    printf("Index is: %d. Value is: %d", val.indexOneDimensional, val.value);
});