сортировка — функция, где дубликаты не допускаются? (C ++)

Так что я полагаю, что нужно изменить функцию, первоначальное назначение которой — чтобы строка не имела более 6 элементов в своем массиве. Вот код

template<class ItemType>
bool Bag<ItemType>::Add(const ItemType& new_entry)
{
bool has_room_to_add = item_count_ < max_items_;
if (has_room_to_add)
{
items_[item_count_] = new_entry;
item_count_++;
}  // end if
return has_room_to_add;
}  // end add

Это моя попытка.

template<class ItemType>
bool set<ItemType>::Add(const ItemType& new_entry)
{
string checker[] = { "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King" };
bool has_room_to_add = item_count_ < max_items_;

//compares the new entry to every item in the string and if there is a duplicate, the loop breaks and nothing is added.
if (has_room_to_add)
{
for ( int i =0; i <=13; i++)
{
if (checker[i] == items_[item_count_])
break;  //ends loop

else if (i==13)
{
items_[item_count_] = new_entry;
break;  //ends loop
}  // end if
} // end for
} //end if

// increases item_count_ if a new item is added to a set.
if (items_[item_count_] == new_entry)
item_count_++;

return has_room_to_add;
}  // end add

Но это не только не предотвращает дубликаты, но и нарушает первоначальную цель не допустить более 6 предметов и теряет популярность, если их больше. Может кто-нибудь сказать мне, что я сделал не так?

0

Решение

C ++ способ сделать это — использовать std::set, так как std::set не хранит дубликаты.

#include <set>
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>

using namespace std;

int main()
{
string checker[] = { "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King",  "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King" };

set<string> mySet;

// insert all of the items in the array into the set
copy(checker, checker + sizeof(checker)/sizeof(checker[0]), std::inserter(mySet, mySet.begin()));
// output the results
copy(mySet.begin(), mySet.end(), std::ostream_iterator<string>(cout, "\n"));
}

Выход:

Ace
Eight
Five
Four
Jack
Joker
King
Nine
Queen
Seven
Six

Обратите внимание, что даже при попытке размещения в наборе повторяющихся записей существует только одна запись. Чтобы ограничить количество элементов до 6:

#include <set>
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>

using namespace std;

int main()
{
string checker[] = { "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King",  "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King" };

set<string> mySet;

// insert all of the items in the array into the set
for (size_t i = 0; i < sizeof(checker)/sizeof(checker[0]); ++i)
{
if ( mySet.size() < 6 )
mySet.insert(checker[i]);
else
break;
}

// output the results
copy(mySet.begin(), mySet.end(), std::ostream_iterator<string>(cout, "\n"));
}

Выход:

Ace
Five
Four
Joker
Three
Two
1

Другие решения


По вопросам рекламы [email protected]