Sponsored Content
Top Forums Programming Map with struct as key and vector as value Post 302917564 by yifangt on Wednesday 17th of September 2014 01:35:15 PM
Old 09-17-2014
Mainly technical problems:
One difference from your code is the the vector part which I thought is a structure containing course_abbreviation, credit and grade. Yours is a vector of string. Which is the part I did not catch with your code?
code:
Code:
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <map>
#include <vector>
#include <cstdlib>

using namespace std;
struct grades {
    string course_Abrrev; 
    int course_Credit; 
    char course_Grade;};

struct IDnName { 
    int student_ID; 
    string student_Name;};

int main(int argc, char *argv[])
{
    vector <struct grades> Courses;
    map < string, vector < grades > >marks;
    map < string, string > names;

 ifstream inFILE;
    inFILE.open(argv[1]);

    if (inFILE.fail()) {
    cout << "ERROR: File failed to open!" << endl;
    } else {
    string line;                //string for one line
    struct IDnName oneName;        // Allocate a place for one ID and name
    struct grades oneCourse;    // Allocate a place for a structure for a record of one course

    while (inFILE.good()) {
        char *sPtr;                //string pointer for token
        char *sArray = new char[line.length() + 1];    //Initialize pointer sArray for string--->char* conversion

        getline(inFILE, line);    //Read the whole line
        strcpy(sArray, line.c_str());
        //tokenize the line into array
        sPtr = strtok(sArray, " ");    
//        oneName.student_ID = atoi(sPtr[0].c_str());   // did not work
        oneName.student_ID = stoi(sPtr);                                //c++ method

        while (sPtr != NULL) {
        oneName.student_Name = sPtr;
        names.insert(make_pair(oneName.student_ID, oneName.student_Name));        //LINE 54
        sPtr = strtok(NULL, " ");
        oneCourse.course_Abrrev = sPtr;
        sPtr = strtok(NULL, " ");
//        oneCourse.course_Credit = atoi(sPtr[0].c_str());  // did not work
        oneCourse.course_Credit = stoi(sPtr);
        sPtr = strtok(NULL, " ");
        oneCourse.course_Grade = sPtr[0];
        }

        if (marks.find(oneName.student_ID) != marks.end()) {                //LINE 65
        marks.insert(make_pair(oneName.student_ID, vector<struct grades>()));        //LINE 66
        } else {
        Courses.push_back(oneCourse);
        }
    }
    }

// print part not ready yet
return 0;
}

Highlighted LINE 54, 65 & 66 are the parts throwing out lots of errors. Thanks!
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Pressing backspace key simulates enter key

Hi, Whenever i press the backspace key, a new line appears, i.e. it works like a enter key. :confused: Thanks (2 Replies)
Discussion started by: vibhor_agarwali
2 Replies

2. Programming

Vector Traversing

Hi i have the following structure struct S { char Mod_num; char val; char chr_nm_cd; } I am reading a 2GB file and inserting into the structure and writing into a vector. I feel like only vector will be a right option. I tried with multimap but it is memory intensive and hence i... (1 Reply)
Discussion started by: dhanamurthy
1 Replies

3. UNIX for Dummies Questions & Answers

How to access a struct within a struct?

Can someone tell me how to do this? Just a thought that entered my mind when learning about structs. First thought was: struct one { struct two; } struct two { three; } one->two->three would this be how you would access "three"? (1 Reply)
Discussion started by: unbelievable21
1 Replies

4. Programming

C++ Map using a Vector as a Value Type?

I modified some code I found on Wikipedia concerning maps to see if it would work before applying it to a project I'm working on that has a similar idea. What I would want is for a user to be able to enter sentences and then be able to distinguish how many times a the person entered a word in a... (4 Replies)
Discussion started by: kcgb20
4 Replies

5. Solaris

Solaris 8 ssh public key authentication issue - Server refused our key

Hi, I've used the following way to set ssh public key authentication and it is working fine on Solaris 10, RedHat Linux and SuSE Linux servers without any problem. But I got error 'Server refused our key' on Solaris 8 system. Solaris 8 uses SSH2 too. Why? Please help. Thanks. ... (1 Reply)
Discussion started by: aixlover
1 Replies

6. Programming

Storing C++-struct in file - problem when adding new item in struct

Hi, I have received an application that stores some properties in a file. The existing struct looks like this: struct TData { UINT uSizeIncludingStrings; // copy of Telnet data struct UINT uSize; // basic properties: TCHAR szHost; //defined in Sshconfig UINT iPortNr; TCHAR... (2 Replies)
Discussion started by: Powerponken
2 Replies

7. Programming

Array and Vector

Hi all, from my understanding I understand that I can use array in this manner. struct test { int a; int b; int c; }; test testing; //creating an array with the structer type testing.a=1; testing.b=2; testing.c=3; If I'm not wrong we can use array in this manner,... (12 Replies)
Discussion started by: vinzping
12 Replies

8. Programming

vector c++

hello guys. i'm new to c++. i've problem using two dimensional vector. i've a project of making conway's game of life. this is the code that i have made so far. my problem is how can i give a two dimensional vector through main. glider.vec1 = vec; is not correct way to give a two... (2 Replies)
Discussion started by: nishrestha
2 Replies

9. Shell Programming and Scripting

Vector normalisation

In AWK For 3 individual vectors of the form: -2.772 -9.341 -2.857 -5.140 -6.597 -1.823 -2.730 -5.615 1.159 I would like to write a script that parses line by line to (i) normalise, (ii) divide by the norm for *each* vector. I.e. sqrt(-2.772^2 + -9.341^2 + -2.857^2)=10.154 ... (4 Replies)
Discussion started by: chrisjorg
4 Replies
READV(3)						     Linux Programmer's Manual							  READV(3)

NAME
readv, writev - read or write data into multiple buffers SYNOPSIS
#include <sys/uio.h> int readv(int filedes, const struct iovec *vector, size_t count); int writev(int filedes, const struct iovec *vector, size_t count); DESCRIPTION
The readv() function reads count blocks from the file associated with the file descriptor filedes into the multiple buffers described by vector. The writev() function writes at most count blocks described by vector to the file associated with the file descriptor filedes. The pointer vector points to a struct iovec defined in <sys/uio.h> as struct iovec { void *iov_base; /* Starting address */ size_t iov_len; /* Number of bytes */ }; Buffers are processed in the order vector[0], vector[1], ... vector[count]. The readv() function works just like read(2) except that multiple buffers are filled. The writev() function works just like write(2) except that multiple buffers are written out. RETURN VALUE
The readv() function returns the number of bytes or -1 on error; the writev() function returns the number of bytes written. ERRORS
The readv() and writev() functions can fail and set errno to the following values: EBADF fd is not a valid file descriptor. EINVAL fd is unsuitable for reading (for readv()) or writing (for writev()). EFAULT buf is outside the processes' address space. EAGAIN Non-blocking I/O had been selected in the open() call, and reading or writing could not be done immediately. EINTR Reading or writing was interrupted before any data was transferred. CONFORMING TO
unknown BUGS
It is not advisable to mix calls to functions like readv() or writev(), which operate on file descriptors, with the functions from the stdio library; the results will be undefined and probably not what you want. SEE ALSO
read(2), write(2) GNU
1993-04-25 READV(3)
All times are GMT -4. The time now is 09:52 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy