我在尝试对指针向量进行排序时遇到了一些麻烦.
这是我到目前为止所做的:
class Node
{
private:
vector <Node*> _children;
string _data;
...
public:
void Node::add_child(Node* child)
{
...
sort(_children.begin(), _children.end());
}
bool Node::operator<(const Node& node)
{
return (this->_data.compare(node._data) == -1);
}
};
Run Code Online (Sandbox Code Playgroud)
如果我这样写的话,我的不足运算符就可以了:
Node* root = new Node("abc");
Node* n = new Node("def");
cout << (*root<*n) << endl;
Run Code Online (Sandbox Code Playgroud)
为什么排序从不打电话给操作员?任何帮助,将不胜感激!谢谢.
madshov
是否可以使用Viper加载/合并多个配置文件?假设我有一个包含我的程序配置的通用配置文件,以及具有每个客户端配置的客户端特定配置文件,其中一个将被加载,具体取决于程序的输入.
谢谢.
我正在寻找一种方法来存储几个gb的数据.数据被加载到树结构中.我希望能够通过我的main函数访问这些数据,但是每次运行程序时我都不想将数据重新加载到树中.做这个的最好方式是什么?我应该创建一个单独的程序来加载数据,然后从主函数调用它,还是有更好的选择?
谢谢Mads
我试图第一次使用mmap来存储一个包含大量数据的树对象.树类基本上包含一个指向Node类的根的指针,每个Node实例都有一个指向它的子节点的数组.我认为mmap正在做它应该做的事情,因为我可以访问树的常量成员,但是当我尝试访问指向root的指针时,我得到了一个段错误.
以下是如何使用根节点创建树:
int main(int argc, char *argv[])
{
Tree *map;
...
map = (Tree*)mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (map == MAP_FAILED) {
close(fd);
perror("Error mmapping the file");
exit(EXIT_FAILURE);
}
Node* root = new Node("data");
map->set_root(root);
...
}
Run Code Online (Sandbox Code Playgroud)
以下是我访问树的方法:
int main(int argc, char *argv[])
{
int i;
int fd;
Tree *map;
fd = open(FILEPATH, O_RDONLY);
if (fd == -1) {
perror("Error opening file for reading");
exit(EXIT_FAILURE);
}
map = (Tree*)mmap(0, FILESIZE, PROT_READ, MAP_SHARED, fd, 0);
if (map …Run Code Online (Sandbox Code Playgroud) 我遇到了矢量容器的问题.我正在努力提高将大量元素插入到一个向量中的性能.
基本上我正在使用vector :: reserve来扩展我的vector _children如果需要:
if (_children.capacity() == _children.size())
{
_children.reserve(_children.size() * 2);
}
Run Code Online (Sandbox Code Playgroud)
并使用vector :: at()在_children的末尾插入一个新元素而不是vector :: push_back():
_children.at(_children.size()) = child;
Run Code Online (Sandbox Code Playgroud)
_children中已有一个元素,因此第一个元素应插入位置1,此时的容量为2.
尽管如此,还是会抛出out_of_range错误.有人可以向我解释一下,我在这里误解了什么?即使所选位置小于矢量容量,是否也不可能只插入一个额外的元素?如果需要,我可以发布更多代码.
提前致谢.
/ MADS
我写了一个简单的包,它基本上由很多getter函数组成.此包中的每个文件对应一个服务,因此例如产品文件包含与产品服务/ db相关的函数,订单文件以订购服务等.每个函数将db资源作为参数作为参数,并将参数作为参数sql,例如.productid,name,orderid.每个函数都返回一个结构(例如Order,product)或错误:
// product.go
package lib
type Product struct {
ID int
Name string
Price float
}
func GetProductById(DB *sql.DB, ID int) (p Product, err error) {
q := "SELECT * FROM product WHERE id = " + ID
...
}
func GetProductByName(DB *sql.DB, name string) (p Product, err error) {
...
}
// order.go
package lib
type Order struct {
ID int
Date string
Items []items
}
func GetOrderById(DB *sql.DB, ID int) (o Order, err error) {
...
} …Run Code Online (Sandbox Code Playgroud)