标签: multiset

考虑集合中每个元素的数量(多重性),测试set是否为子集

我知道我可以测试set1是否是set2的子集:

{'a','b','c'} <= {'a','b','c','d','e'} # True
Run Code Online (Sandbox Code Playgroud)

但以下也是正确的:

{'a','a','b','c'} <= {'a','b','c','d','e'} # True
Run Code Online (Sandbox Code Playgroud)

我如何考虑集合中元素的出现次数,以便:

{'a','b','c'}     <= {'a','b','c','d','e'}      # True
{'a','a','b','c'} <= {'a','b','c','d','e'}      # False since 'a' is in set1 twice but set2 only once
{'a','a','b','c'} <= {'a','a','b','c','d','e'}  # True because both sets have two 'a' elements
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

A, B, C = ['a','a','b','c'], ['a','b','c','d','e'], ['a','a','b','c','d','e']
all([A.count(i) == B.count(i) for i in A]) # False
all([A.count(i) == C.count(i) for i in A]) # True
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一些更简洁的东西set(A).issubset(B,count=True)或一种方法来保持列表理解.谢谢!

python set subset multiplicity multiset

4
推荐指数
2
解决办法
4828
查看次数

C++:在多集合容器中使用自己的类

起初我是新来的,英语不是我的母语,所以对任何语法上的失败道歉,但我发现这个社区真的很好,所以我会尽可能准确地问我的问题.

我想将自己的类对象添加到stl容器multiset中,并希望使用我自己在类中定义的重载less运算符对其进行排序.我真的尝试了几种解决方案,但没有真正有效,所以我希望有人可以给我一些有用的提示来解决它.

这是我对类定义的总体看法:

class object {
public:
    int first;
    string second;

    object(int f, string s) {
         first = f;
         second = s;
    }

    bool operator<(const object &comp) {
        return first < comp.first;
        }
};
Run Code Online (Sandbox Code Playgroud)

这是我的第一次尝试,它没有用,所以我也尝试将重载的运算符声明为朋友方法,但它也不起作用.

这是我的主要功能的简短代码摘录:

includes ...
//code omitted
int main() {
    multiset<object*> mmset;

    mmset.insert(new object(10, "test"));
    mmset.insert(new object(11, "test"));

    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

过了一会儿,我开始调试我的代码,并试图找出问题所在,我遇到了以下让我有点怀疑的事情.

来自stl的代码提取:

// TEMPLATE STRUCT less
template<class _Ty>
struct less : public binary_function<_Ty, _Ty, bool>
    {   // functor for operator<
    bool operator()(const _Ty& _Left, const _Ty& …
Run Code Online (Sandbox Code Playgroud)

c++ containers stl operator-overloading multiset

3
推荐指数
1
解决办法
2561
查看次数

从多集C++中删除时出现段错误

我不知道是什么让这段代码出错.这是一个简单的multiset.没有编译错误,但在执行时机器上出现分段错误.

g ++版本:4.8.2

机器:Ubuntu 14.04

#include <cstdio>
#include <set>

using namespace std;

struct compare
{
    bool operator() (int lhs, int rhs) { return lhs < rhs; }
};
typedef multiset < int, compare >  mi;

mi sett;

int main(void)
{
    sett.insert(5);
    sett.insert(5);
    sett.erase(*sett.begin());
    sett.erase(*sett.rbegin());
    printf("Done\n");
}
Run Code Online (Sandbox Code Playgroud)

c++ stl segmentation-fault multiset

3
推荐指数
1
解决办法
404
查看次数

多集 stl 中的下界

我试图通过使用以下方法找出多集中有多少元素小于某个 X:

mset.lower_bound(X) - mset.begin()
Run Code Online (Sandbox Code Playgroud)

但它没有用。任何解决方法?

c++ stl multiset c++11

3
推荐指数
1
解决办法
622
查看次数

我们在multiset中有哪些更好的功能不在向量中?

为什么我们应该使用"多组"(因为我们知道"多组"可以保持重复键)

为什么我们不应该使用向量?

我们在向量中没有"多组"中有什么好的功能吗?(或其他容器,如矢量)

你知道"多套装"的特殊用法吗?

c++ containers vector set multiset

3
推荐指数
1
解决办法
909
查看次数

获取guava多重集中元素的实例数而不进行迭代

我在guava中有一个multiset,我想检索一个给定元素的实例数而不迭代这个multiset(我不想迭代因为我认为迭代需要相当长的时间,因为它查看了所有的集合).

为此,我首先考虑使用multiset的entryset()方法来获取具有单个实例及其相应计数的集合.然后,将此集转换为hashmap(其中keys是我的set的元素,值是它们的实例计数).因为那时我可以使用hashmap的方法直接从其键中检索一个值 - 完成!但这只有在我能够快速地将集合转换为散列图(没有迭代所有元素)时才有意义:是否可能?

(正如我所说的,我希望这个问题在多个方面存在缺陷,如果你能说明我在这里可能犯的概念错误,我会很高兴.谢谢!)

java multiset guava

2
推荐指数
1
解决办法
960
查看次数

在C++多集中获取前N个元素

如何从多集结构中获取前N个元素,而不是不断获取第一个(.begin())元素然后擦除它?

我只是想在不影响multiset的情况下对前N个元素求和.

c++ multiset

2
推荐指数
1
解决办法
1988
查看次数

如何在C++中使用multiset插入一对

我想在多集中插入一个整数值和一对.

所以我宣布它为:

multiset < int, pair < int, int> > mp;
int m,n,p;
Run Code Online (Sandbox Code Playgroud)

要在multiset中插入,我试过这个:

mp.insert(make_pair(m, make_pair(n,p))); // Compile time error
Run Code Online (Sandbox Code Playgroud)

但它给出编译时错误......有人可以建议正确的方法来实现它.

c++ multiset std-pair

2
推荐指数
1
解决办法
2504
查看次数

C++ 多重集:删除最后一个元素

如何从多重集中删除最后一个元素。我尝试将反向迭代器传递给擦除函数,但这是不允许的。有什么建议么?

c++ multiset

2
推荐指数
1
解决办法
2659
查看次数

插入多重集:在该值的第一次出现之前而不是在最后一次出现之后

如标题所述,multiset在所有相同值的范围的末尾插入一个值。

(例如:在一个多重插入2 1,2,2,3使得它1,2,2,/*new*/ 2,3)。

如何获得在所有相同值范围的开头插入的新值?

(例如:在多集中插入2 1,2,2,3应该使1,/*new*/ 2,2,2,3

c++ stl multiset

2
推荐指数
1
解决办法
72
查看次数