gpt4 book ai didi

c++ - 如何使用 C++ 避免映射中的重复值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:23 25 4
gpt4 key购买 nike

我正在尝试使用映射在 C++ 中编写程序...

我的目标是避免在 map 中重复相同的值。

如果键相同,我们可以使用映射来避免键重复。为了允许重复键,我们使用多重映射。

如果值相同,如何避免?

我写的程序允许重复值:

typedef std::map<int, std::string> MyMap;

int main()
{
MyMap map;
MyMap::iterator mpIter;

int key;
string value;

int count;
for(count = 0; count < 3;count++)
{
cin >> key;
cin >> value;

std::pair<MyMap::iterator, bool> res = map.insert(std::make_pair(key,value));
}

for (mpIter=map.begin(); mpIter != map.end(); ++mpIter)
cout << " " << (*mpIter).second << endl;
}

最佳答案

将值作为键的一部分和/或使用集合,但这可能无法真正解决问题。如果您想要的话,不可能轻松定义同时具有唯一键和值的容器。但是,您仍然可以构建一个。这是一个非常简单的例子来说明需要什么:

// Assuming keys are KEY and values are VAL

class MyMap {
public:
std::set<KEY> keyset;
std::set<VAL> valset;

std::map<KEY,VAL> theRealMap;

// assuming existence of function HAS(S,V)
// which returns true if v is in set S
bool MyInsert(KEY ky, VAL val) {
if (HAS(keyset, ky) return false;
if (HAS(valset, val) return false;
keyset.insert(ky);
valset.insert(vl);
return theRealMap.insert(std::pair<KEY,VAL>(ky, val));
}
:
:

由于这是一个示例,因此不应复制。您可能希望包含 std:map 提供的功能。一种简单的方法是使用 std::map 作为基类,但您需要隐藏(通过私有(private)化)或为插入的每个变体实现类似的代码,否则您可能会无意中插入可能不是唯一的。

注意:这需要两倍于单个 map 的大小。您可以通过使用 RealMap 而不是单独的键集来节省一些空间。另一种方法是搜索 map ,但这会牺牲时间换取空间。由您决定。

关于c++ - 如何使用 C++ 避免映射中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36958502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com