我试图实现一个稀疏的3D网格与std::集容器,但我不能理解从编译器返回的错误,这是我试图运行的最小示例:
#include <iostream>
#include <vector>
#include <limits>
#include <set>
#include <Eigen/Core>
using namespace std;
class Cell {
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Cell(const Eigen::Vector3i idx=Eigen::Vector3i::Zero()):_idx(idx) {
_center = Eigen::Vector3f::Zero();
_parent = 0;
_distance = std::numeric_limits<int>::max();
}
inline bool operator < (const Cell& c){
for (int i=0; i<3; i++){
if (_idx[i]<c._idx[i])
return true;
if (_idx[i]>c._idx[i])
return false;
}
return false;
}
inline bool operator == (const Cell& c) { return c._idx == _idx;}
private:
Eigen::Vector3i _idx;
Eigen::Vector3f _center;
vector<Eigen::Vector3f> _points;
Cell* _parent;
size_t _closest_point;
float _distance;
int _tag;
};
int main(int argc, char* argv[]) {
set<Cell> grid;
float max = 1, min = -1;
int dim = 5;
float delta = (max-min)/(dim-1);
for(int k = 0; k < dim; k++)
for(int j = 0; j < dim; j++)
for(int i = 0; i < dim; i++)
grid.insert(Cell(Eigen::Vector3i(i,j,k)));
return 0;
}
这是编译器错误:
在包含的文件从 /usr/include/c /4.8/string:48:0,从 /usr/include/c /4.8/bits/locale_classes.h:40,从 /usr/include/c /4.8/bits/ios_base.h:41,从 /usr/include/c /4.8/ios:42,从 /usr/include/c /4.8/ostream:38,从 /usr/include/c /4.8/iostream:39,从 /home/dede/build/sparse_grid/main.cpp:1: /usr/include/c /4.8/bits/stl_function.h:在 'bool std::less 的实例化中
如果有人能告诉我我做错了什么,我将非常感激。
谢谢,费德里科
您已声明了 参数
只需在循环中创建一个临时的单元格对象,并将其插入单元格中
像这样做:
for(int k = 0; k < dim; k++)
for(int j = 0; j < dim; j++)
for(int i = 0; i < dim; i++)
{
Eigen::Vector3i(i,j,k) eigenVec;
Cell cell(eigenVec);
grid.insert(cell);
}
您的编译应该会成功。
您已经定义了<代码>运算符
您可以为< code>less提供一个非成员函数,一旦它是const,它就可以使用您的成员函数。
bool operator <(const Cell &a, const Cell &b)
{
return a < b;
}
但是,std::less
将为您提供此功能,前提是您的成员函数是const
。
您应该将布尔运算符函数声明为 const
成员:
inline bool operator < (const Cell& c) const {
// ^^^^^
for (int i=0; i<3; i++){
if (_idx[i]<c._idx[i])
return true;
if (_idx[i]>c._idx[i])
return false;
}
return false;
}
inline bool operator == (const Cell& c) const { return c._idx == _idx;}
// ^^^^^
否则,它们不能与<code>单元格</code>的右值对象一起使用。
本文向大家介绍C语言实现稀疏矩阵,包括了C语言实现稀疏矩阵的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现稀疏矩阵的具体代码,供大家参考,具体内容如下 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍实现稀疏数组的C ++程序,包括了实现稀疏数组的C ++程序的使用技巧和注意事项,需要的朋友参考一下 稀疏矩阵是其中大多数元素为0的矩阵。其示例如下。 下面给出的矩阵包含5个零。由于零的数量大于矩阵元素的一半,因此它是稀疏矩阵。 算法 示例 输出结果
请看示例代码(注意 data 的数组下标): -- http://www.kyne.com.au/~mark/software/lua-cjson.php -- version: 2.1 devel local json = require("cjson") local data = {1, 2} data[1000] = 99 -- ... do the other things ngx.
问题内容: 有没有人有正确的代码示例 Jenkins DSL插件中需要设置块来设置git稀疏签出吗? 好像config.xml部分看起来像这样: 问题答案:
我正在使用Jax-RS和Jooq。我想知道如何使用稀疏数据实现REST补丁。 比如说我有一些PoJo。我得到了一个JSON补丁(http://www.restapitutorial.com/lessons/httpmethods.html)请求的对象不完整,只包含应该更改的字段。 我该如何编写这样的处理程序? 我试着接受真实的Pojo对象。我的第一个想法是“如果一个字段为空,我就不更新它”。这是我
8.2.3.1. 稀疏检出 从1.7.0版本开始Git提供稀疏检出的功能。所谓稀疏检出就是本地版本库检出时不检出全部,只将指定的文件从本地版本库检出到工作区,而其他未指定的文件则不予检出(即使这些文件存在于工作区,其修改也会被忽略)。 要想实现稀疏检出的功能,必须同时设置core.sparseCheckout配置变量,并存在文件.git/info/sparse-checkout。即首先要设置Git