- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C++ 创建自己的树状容器。以下是我想象中的结构概述:
//==========================================================
// Concept
//==========================================================
//
// RootNode -> Attributes
// -> Nodes -> Attributes
// -> Nodes -> Attributes
// -> Nodes
//
// etc...
//==========================================================
我暂时将类型命名为 DataTree
。 header 如下所示:
#pragma once
#include <map>
#include <set>
#include <string>
namespace LB{
class DataTree;
struct DataTreeComparitor{
bool operator () (DataTree const & lhs, DataTree const & rhs) const;
bool operator () (std::string const & lhs, DataTree const & rhs) const;
bool operator () (DataTree const & lhs, std::string const & rhs) const;
};
class DataTree{
public:
template <typename Type>
Type getAttribute(std::string const & name) const{
static_cast<Type>(*m_attributes.find(name));
}
DataTree getChild(std::string const & name) const;
std::string getName(void) const;
private:
std::string m_name;
std::multimap<std::string, std::string> m_attributes;
std::multiset<DataTree, DataTreeComparitor> m_children;
};
}
我想使用 std::string
在容器 m_children
中查找元素,DataTreeComparitor
将与 getName()
。
但是,当尝试在 m_children
上调用 find()
时,我从 mingw32
收到以下错误:
C:/Users/Joshua/Documents/BitBucket/LBC++/LBC++/DataTree.cpp:17:31: error: no matching function for call to 'std::multiset<LB::DataTree, LB::DataTreeComparitor>::find(const string&) const'
这使用 MSVC
:
2 IntelliSense: no instance of overloaded function "std::multiset<_Kty, _Pr, _Alloc>::find [with _Kty=LB::DataTree, _Pr=LB::DataTreeComparitor, _Alloc=std::allocator<LB::DataTree>]" matches the argument list
argument types are: (const std::string)
object type is: const std::multiset<LB::DataTree, LB::DataTreeComparitor, std::allocator<LB::DataTree>> c:\Users\Joshua\Documents\Visual Studio 2013\Projects\Project1\Project1\Source.cpp 46 21 Project1
下面是实现,问题行通过注释指出:
#include "DataTree.h"
namespace LB{
bool DataTreeComparitor::operator () (DataTree const & lhs, DataTree const & rhs) const{
return lhs.getName() < rhs.getName();
}
bool DataTreeComparitor::operator () (std::string const & lhs, DataTree const & rhs) const{
return lhs < rhs.getName();
}
bool DataTreeComparitor::operator () (DataTree const & lhs, std::string const & rhs) const{
return lhs.getName() < rhs;
}
DataTree DataTree::getChild(std::string const & name) const{
return *m_children.find(name); // problem line
}
}
我一辈子都弄不明白为什么编译器不使用 DataTreeComparitor
将 DataTree
与 std::string
进行比较.
我的问题是,它为什么不这样做?如您所见,我已尝试向比较器添加运算符重载,其中 std::string
既是左手运算符又是右手运算符。
注意:
我知道这种 DataTree
类型缺少许多基本功能;它仍在进行中。
最佳答案
问题是您正在调用 multiset<DataTree, DataTreeComparitor>::find
用std::string
范围。那行不通,因为它需要 DataTree
,并且没有来自 std::string
的转换至 DataSet
.
您可以通过添加隐式转换构造函数来解决此问题:
class DataTree{
public:
DataTree(const std::string& name) : m_name(name) {}
....
};
关于c++ - 使用类型成员作为 std::multiset 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106033/
我想找出一个算法来验证一个multiset是否是另一个multiset的子集和的并集,但是我自己奋斗了几个小时失败了。 详情如下: Multiset A:一个正整数集 Multiset B:一个正整数
在我看来,它们是一样的。但在 Visual Studio 2015 中,它们肯定是不同的。 //Ok, work properly multiset > ms1; ms1.insert(10); ms
一 问题描述 并行处理中的编程规范之一是生产者/消费者范型,可以使用具有管理者进程和多个客户端进程的系统来实现。客户可以是生产者、消费者等。管理者跟踪客户进程。每个进程都有一个成本,允许具有相同成本的
如果能帮助调试多重集容器的一些奇怪行为,我将不胜感激。有时,容器似乎停止排序。这是一个不常见的错误,很长一段时间后才在一些模拟中出现,而且我缺乏想法。 (我是一个业余程序员--欢迎各种建议。) 我的容
我有一个带有自定义谓词函数的多重集,例如 multiset其中 MyCompFunc 查看 MyClass 对象的属性。在应用程序的运行过程中,对象可能会以某种方式发生变化,从而导致它们被重新排序。
我最近发现 multiset STL 中的实现实际上在树中保留相同重复元素的不同拷贝。我之前的期望是它在内部使用 map并只保留重复元素的计数。 与仅保持计数相比,这种实现在什么情况下可以带来好处?
假设你有一个如下表: CREATE TABLE EMPLOYEE_SALES ( EMPLOYEE_ID NUMBER, PRODUCT_ID NUMBER, SALE_AM
我正在使用指向对象的 std::multiset 指针来在我的游戏中实现 Z 排序,因此我不需要在每次插入时对结构进行排序。我使用比较器按对象的深度插入: struct rendererCompara
将长字符串转换为包含单词和计数的数据结构的最佳方法是什么。 我会做 .split("") 来分割空格并大概创建一个数组列表,然后可能会遍历数组列表并将每个项目添加到 HashMap 或多集?我不确定执
我在为以下用例决定更好的设计模式时遇到了麻烦。 我们的项目中有两个模块, 模块 1、模块 2 对于访问每个模块的用户,有两组四个权利:一组用于模块 1,另一组用于模块 2。 现在,根据用户角色的正确组
我的 MultiSet 类的一些方法存在一些问题。这是一个测试器,MultiSet 类应该得到输出:“成功!”如果它工作正常。这是测试仪: public class MultiSetTest {
多线程访问是否需要同步 pair equal_range (const value_type& val) const; 由于 equal_range 是读取操作,因此可能不需要。请给出意见。 最佳答案
我需要一个 Guava MultiSet.Entry 的比较器,用于首先按计数排序,然后按字符串排序。但是,我遇到了编译器问题,并且我认为我得到了一些泛型错误的信息。 编译: Comparator>
我正在寻找计算 std::multiset 中元素的不同出现次数的代码。我有以下代码 #include #include #include #include struct test {
我能否以某种方式重载任何 std::multiset 的运算符(就像您使用“()”来创建自定义 comapre 函数一样)以便当交换 multiset 中的 2 个元素时,来自另一个 vector 的
我需要找到树中的最佳路径,树是multiset 元素的所有可能组合。例如对于这个 multiset:A - B - C,树将由所有 6 种可能的组合组成:A - B - C |A - C - B |B
下午好,我有一个C++类Range它实现了一个 operator ranges_type 使用. 由于 multiset 构造函数没有指定自定义比较仿函数,它使用 std::less operato
我有 std::multiset 如果我从 std::multiset::begin() 迭代到 std::multiset::end( ) 我将得到排序的元素。除了从 std::multiset::
我想打印出多重集中的每个重复项,但不知何故迭代器对我来说表现得很奇怪。如何修复此代码?这段代码导致了一个永远的循环,这让我很惊讶。 #include #include #include stat
我有一个 std::multiset存储 class A 的元素.我提供了自己的 operator< 实现对于这个类。我的问题是,如果我在这个多重集中插入两个等效对象,它们的顺序是否得到保证?例如
我是一名优秀的程序员,十分优秀!