Итак, у меня есть этот код.Как найти пересечение двух мешков
сумка интерфейс
#ifndef BAGINTERFACE_H
#define BAGINTERFACE_H
#include <vector>
#include <algorithm>
template<class ItemType>
class BagInterface
{
public:
virtual int getCurrentSize() const = 0;
virtual bool isEmpty() const = 0;
virtual bool add(const ItemType& newEntry) = 0;
virtual bool remove(const ItemType& anEntry) = 0;
virtual void clear() = 0;
virtual int getFrequencyOf(const ItemType& anEntry) const = 0;
virtual bool contains(const ItemType& anEntry) const = 0;
virtual std::vector<ItemType> toVector() const = 0;
};
#endif /* BAGINTERFACE_H */
сумка #ifndef BAG_H #define BAG_H
#include "BagInterface.h"
template <class ItemType>
class Bag: public BagInterface<ItemType>
{
public:
int getCurrentSize() const { return v.size(); }
bool isEmpty() const { return v.empty(); }
bool add(const ItemType& newEntry) { v.push_back(newEntry); return true; }
bool remove(const ItemType& anEntry) { std::remove(v.begin(), v.end(), anEntry); return true; }
void clear() { v.clear(); }
int getFrequencyOf(const ItemType& anEntry) const { return std::count(v.begin(), v.end(), anEntry); }
bool contains(const ItemType& anEntry) const { return true; }
std::vector<ItemType> toVector() const { return v; }
private:
std::vector<ItemType> v;
};
#endif /* BAG_H */
и моя текущая программа main.cpp
#include <iostream> // For cout and cin
#include <string> // For string objects
#include "Bag.h" // For ADT bag
using namespace std;
int main()
{
string clubs[] = { "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King" };
// Create our bag to hold cards
Bag<string> grabBag;
Bag<string> dumpBag;
grabBag.add(clubs[1]);
grabBag.add(clubs[2]);
grabBag.add(clubs[4]);
grabBag.add(clubs[8]);
grabBag.add(clubs[10]);
grabBag.add(clubs[12]);
dumpBag.add(clubs[3]);
dumpBag.add(clubs[5]);
dumpBag.add(clubs[7]);
dumpBag.add(clubs[9]);
dumpBag.add(clubs[10]);
dumpBag.add(clubs[12]);
Bag<string> Itersection(Bag<string> bagToCompare){
return grabBag;
}
return 0;
}; // end main
Я пытаюсь найти пересечение из двух мешков, которые будут новой сумкой, содержащей которые встречаются в обоих оригинальных двух мешках. Поэтому в основном мне нужно спроектировать и указать пересечение метода, которое возвращает в качестве нового мешка пересечение сумки, получающей вызов метода, и мешок, который является одним из аргументов метода. Предположим, что bag1 и bag2 являются мешками; bag1 содержит строки a, b и c; и bag2 содержит строки b, b, d и e. Выражение bag1.intersection (bag2) возвращает сумку, содержащую только строку b.
Я уже сделал два мешка для сравнения друг с другом, но я не слишком уверен, как создать метод пересечения.
Любая помощь будет отличной. Спасибо.
Как вы определяете пересечение двух мешков? Что, если сумка A содержит '' Joker ''3 раза, а сумка B содержит' 'Joker'' 2 раза? Сколько раз «Джокер» на пересечении А и В? –
Если вы определили 'contains' в значимом ключе, вы решили половину проблемы. – Beta
@robmayoff Ну, предположим, что bag1 и bag2 являются мешками; bag1 содержит строки a, b и c; и bag2 содержит строки b, b, d и e. Выражение bag1.intersection (bag2) возвращает сумку, содержащую только строку b. –