Hys
Hys

Reputation: 1

How do I access elements of multiset within a vector in the format "vector<multiset<char> vp;"?

I am creating a program that receives a value in multiset in the form of vector<multisetvp; and stores it in multiset inside the vector when the number of it becomes five. If you store values from 1 to 10, when you print out vector, 1 2 3 4 5 6 7 8 9 10 I want it to come out like this.

However, it is difficult to output the value stored in multiset inside the vector. Ask for help in how to solve this problem.

I also tried to output the value of 'sp' using overlapping 'range-based for statements', but it ended up outputting only one multiset of vector. I want to store and output multisets with up to five elements in the vector.

#include <iostream>
#include <set>
#include <vector>
#include <array>

using namespace std;

class MyCharector {
    vector<multiset<char>> vp;
    vector<multiset<char>>::iterator vit;
    multiset<char>* sp;
    multiset<char>::iterator sit;
public:
    ~MyCharector() {  }

    void ininven(multiset<char> s) {
        vp.push_back(s);
    }

    void getItem(char* item) {
        sp = new multiset<char>;
        for (int i = 0; i < 10; i++) {
            sp->insert(item[i]);
            if (sp->size() == 5) {
                ininven(*sp);
            }
        }
        delete sp;
    }
    void dropItem() { // is not use
        vit = vp.begin();
        vit = vp.erase(vit);
    }
    void showItem() { 

        for (vit = vp.begin(); vit != vp.end(); vit++) {
            // problems.....
        }
    }
};

int main(int argc, const char* argv[]) {
    MyCharector my;

    array<char,10> item = { 'a','a','e','d','g','f','c','c','h','b' };
    
    my.getItem(item.data());

    my.showItem();

    
    return 0;
}




Upvotes: 0

Views: 115

Answers (1)

john
john

Reputation: 87959

Of course you can make it work with iterators but what's wrong with simple range based loops?

for (const auto& ms : vp)
    for (char c : ms)
        cout << c;

Also why use new and delete in getItem? And why declare class variables when you should use local variables?

void getItem(char* item) {
    multiset<char> sp;
    for (int i = 0; i < 10; i++) {
        sp.insert(item[i]);
        if (sp.size() == 5) {
            ininven(sp);
        }
    }
}

sp doesn't need to be a pointer, and it should be a local variable.

EDIT

Also I think getItem has a bug. I'm guessing that you want a new multiset every five character, but that's not what the code does. Maybe this is what you want

void getItem(char* item) {
    multiset<char> sp;
    for (int i = 0; i < 10; i++) {
        sp.insert(item[i]);
        if (sp.size() == 5) {
            ininven(sp);
            sp.clear(); // start again
        }
    }
}

Upvotes: 1

Related Questions