У меня есть следующий код C ++.Я пытаюсь стереть член набора, явно указав его значение, и почему-то это не работает.
#include <iostream>
#include <set>
struct compareWeights
{
template<typename T>
bool operator()(const T& l, const T& r) const
{
return l.second <= r.second;
}
};
int main(){
std::set<std::pair<std::string, int>, compareWeights> set = {
{"A", 4}, {"B", 4}, {"C", 1}, {"A", 0}, {"B", 3}
};
for (auto const &p: set) {
std::cout << p.first << " " << p.second << '\n';
}
set.erase({"A", 0}); //Problem area
std::cout << "\n";
//Just to print the contents of the new set after erasing
for (auto const &p: set) {
std::cout << p.first << " " << p.second << '\n';
}
return 0;
}
Я прокомментировал, чтобы выделить место, где происходит проблема.Я вижу, что std::set.erase
возвращает 0 (не находит элемент), но я не уверен, почему метод erase
не может найти элемент.
Я попытался изменить erase
на
set.erase(std::make_pair("A", 0))
Но все равно ничего не изменилось.