我有一堂课(摘录):
\n\nclass Package\n{\nprivate:\n string s_package_name;\n float f_boottime;\n float f_bytesize;\n list <Package> l_depends;\n list <Package> l_selects;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我想生成许多对象并将它们列出在一个唯一的“数组”中,因此我添加了set如下对象:
set<Package> l_tempSet; \nPackage PackageA(1, 11, "what a package");\nPackage PackageB(2, 22, "what a 2nd package");\n\nl_tempSet.insert(PackageA);\nl_tempSet.insert(PackageB);\nRun Code Online (Sandbox Code Playgroud)\n\n编译时我收到一条错误消息:
\n\n\n\n\n与 \xc2\xbboperator<\xc2\xab 不匹配(操作数类型为 \xc2\xbbconst Package\xc2\xab 和 \xc2\xbbconst\n Package\xc2\xab)
\n
当单击错误消息时,它会将我指向 set.h 到unique调用的行,我认为这就是错误。
C++ 是否真的无法将“唯一”对象(如本示例中所示)放入列表和集合中,并且只能处理简单的数据类型(如 int、float 等)?或者我在某个地方出错了,请帮助我,我不确定错误到底在哪里。
\n\n感谢您的支持
\n假设我有一个这样的联盟:
union checkUnion{
std::string* str;
bool someBool;
int aNumber;
};
Run Code Online (Sandbox Code Playgroud)
我如何检查在程序中选择了这 3 个项目中的哪一个?我想对每个项目进行单独的 if 查询。
例如:[伪代码]
if (checkUnion == string)
{
//CODE
}
if (checkUnion == bool)
{
//DIFFERENT CODE
}
Run Code Online (Sandbox Code Playgroud) 我想使用find()方法来捕获我的std :: map()的特定元素
现在返回值是我正在寻找的元素,或者它指向地图的末尾(如果找不到元素)(Cf:http://www.cplusplus.com/reference/map/map/找/).
所以我正在使用这两个信息来决定元素是否在地图中.但是如果元素已经在内部但在最后呢?会发生什么?然后,我的if-query将决定它不存在,因此我的程序将被编制.
我是否正确使用这个例程,如果,如何预防呢?
感谢您的支持
问题
让我们假设我们正在使用大型数据集,为了简单起见,我们在这个问题中使用这个较小的数据集:
dataset = [["PLANT", 4,11],
["PLANT", 4,12],
["PLANT", 34,4],
["PLANT", 6,5],
["PLANT", 54,45],
["ANIMAL", 5,76],
["ANIMAL", 7,33],
["Animal", 11,1]]
Run Code Online (Sandbox Code Playgroud)
并且我们想找出哪个列具有最长的连续值范围,哪个是最快的找出方法,哪个是最佳列?
天真的做法
我发现它很快就可以按每列分类
sortedDatasets = []
for i in range(1,len(dataset[0]):
sortedDatasets.append(sorted(dataset,key=lambda x: x[i]))
Run Code Online (Sandbox Code Playgroud)
但是这里出现了滞后的部分:我们可以从这里继续for loop为每个已排序的数据集做一个,并计算连续的元素但是当处理for loopspython时非常慢.
现在我的问题是:有没有比这种天真的方法更快的方法,甚至可能有这些2D容器的内置函数?
更新:
更准确地说,范围的含义可以通过这种伪算法来描述 - 这包括在以下情况下递增current value == next value:
if nextValue > current Value +1:
{reset counter}
else:
{increment counter}
Run Code Online (Sandbox Code Playgroud)