仅当值不存在时才将元素从映射添加到对 (C++)

Add element from map to pair only if the value doesn't already exist (C++)

我正在尝试将 map 中的元素添加到 pair vector 中,然后根据值对向量进行排序,但我不想添加具有相同值的元素,而且我不知道如何制作这样的 if 语句。

地图包含单词在 main() 的输入中重复的次数和单词本身,我想对具有地图元素的向量进行排序,但我不想重复单词已重复相同次数。

这是我目前拥有的:

bool compara(pair<string, unsigned int>& a,
    pair<string, unsigned int>& b)
{
    return a.second > b.second;
}

void sortP(map<string, unsigned int> &M, unsigned int x)
{
    vector<pair<string, unsigned int> > A;

    for (auto& it : M) {  
        if(find(A.begin(), A.end(), it.second) == A.end())    // this is the part that 
               A.push_back(it);                               //       doesn't work  
    }

    sort(A.begin(), A.end(), compara);

    for (auto& it : A) {

        cout << it.second << "\t"
            << it.first << endl;
    }
    cout << endl << endl;
    // this is where i want to output the element of the vector that appears on the 'x' 
    // position, after it was sorted
}

如果术语不完全正确,我深表歉意,我刚刚开始习惯使用 mapspairs

由于您正在搜索 vectorpair,因此您需要使用 std::find_if() 而不是 std::find() 来查找 vector 元素匹配pair的特定字段,例如:

for (auto& it : M) {  
    if (find_if(A.begin(), A.end(), [&](pair<string, unsigned int>& p){ return p.second == it.second; }) == A.end())
        A.push_back(it);
}

或者,您可以只使用另一个 map 而不是 vector,使用 it.second 作为键类型,并让 map 处理排序和复制为您处理。