associative containers and algorithms

Discussion in 'C++' started by subramanian100in@yahoo.com, India, May 6, 2008.

  1. , India

    , India Guest

    I am copying the following lines as it is, from Stanley Lippman's C++
    Primer 4th edition, page 418(First paragraph).

    It says:
    "Although the map and set types provide bidirectional iterators, we
    can use only a subset of the algorithms on associative containers. The
    problem is that key in an associative container is const. Hence, any
    algorithm that writes to elements in the sequence cannot be used on an
    associative container. We may use iterators bound to associative
    containers only to supply arguments that will be read."

    Here, consider the line "any algorithm that writes to elements in the
    sequence cannot be used on an associative container".

    Consider the code fragment:

    typedef set<int> s_type;
    s_type s1;
    s_type s2;

    // store some values into s1 and s2.

    s_type dest;

    merge(s1.begin(), s1.end(), s2.begin(), s2.end(),
    inserter(dest, dest.end()));

    s_type temp;

    copy(s1.begin(), s1.end(), inserter(temp, temp.end()));

    Here I am able to write merged elements into dest and copy elements
    into temp. Can these operations be considered as "writing elements
    into associative container" ? Or, if the above stated line from the
    book refers to some other algorithms ? If so, please give me one or
    two such algorithm names, for my understanding purpose.

    My question is: I am to write elements from the input sequence into
    insert_iterator< set<int> >

    Kindly clarify.

    Thanks
    V.Subramanian
     
    , India, May 6, 2008
    #1
    1. Advertising

  2. , India

    Ian Collins Guest

    , India wrote:
    > I am copying the following lines as it is, from Stanley Lippman's C++
    > Primer 4th edition, page 418(First paragraph).
    >
    > It says:
    > "Although the map and set types provide bidirectional iterators, we
    > can use only a subset of the algorithms on associative containers. The
    > problem is that key in an associative container is const. Hence, any
    > algorithm that writes to elements in the sequence cannot be used on an
    > associative container. We may use iterators bound to associative
    > containers only to supply arguments that will be read."
    >
    > Here, consider the line "any algorithm that writes to elements in the
    > sequence cannot be used on an associative container".
    >
    >
    > Here I am able to write merged elements into dest and copy elements
    > into temp. Can these operations be considered as "writing elements
    > into associative container" ?


    "writes *to* elements in the sequence" != "writing elements *into*
    associative container"

    --
    Ian Collins.
     
    Ian Collins, May 6, 2008
    #2
    1. Advertising

  3. , India

    S S Guest

    On May 6, 10:14 am, ", India"
    <> wrote:
    > I am copying the following lines as it is, from Stanley Lippman's C++
    > Primer 4th edition, page 418(First paragraph).
    >
    > It says:
    > "Although the map and set types provide bidirectional iterators, we
    > can use only a subset of the algorithms on associative containers. The
    > problem is that key in an associative container is const. Hence, any
    > algorithm that writes to elements in the sequence cannot be used on an
    > associative container. We may use iterators bound to associative
    > containers only to supply arguments that will be read."
    >
    > Here, consider the line "any algorithm that writes to elements in the
    > sequence cannot be used on an associative container".
    >
    > Consider the code fragment:
    >
    > typedef set<int> s_type;
    > s_type s1;
    > s_type s2;
    >
    > // store some values into s1 and s2.
    >
    > s_type dest;
    >
    > merge(s1.begin(), s1.end(), s2.begin(), s2.end(),
    > inserter(dest, dest.end()));
    >
    > s_type temp;
    >
    > copy(s1.begin(), s1.end(), inserter(temp, temp.end()));
    >
    > Here I am able to write merged elements into dest and copy elements
    > into temp. Can these operations be considered as "writing elements
    > into associative container" ? Or, if the above stated line from the
    > book refers to some other algorithms ? If so, please give me one or
    > two such algorithm names, for my understanding purpose.
    >
    > My question is: I am to write elements from the input sequence into
    > insert_iterator< set<int> >
    >
    > Kindly clarify.
    >
    > Thanks
    > V.Subramanian


    "merge" and "copy" is not modifying the contents of 'set' OR they are
    not modifying the key. They are just merging the new contents into the
    tree (internally set/map are tree implementation).
    Hence not modifying the contents means, you can not do something like
    this,
    set<int>::iterator it = s_type.find(10); // suppose you found.
    *it = 20; // not allowed.
     
    S S, May 6, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Dave
    Replies:
    3
    Views:
    400
    Kevin Goodsell
    Apr 19, 2004
  2. utab
    Replies:
    2
    Views:
    484
    Daniel T.
    Mar 12, 2006
  3. desktop
    Replies:
    5
    Views:
    395
    James Kanze
    Jun 26, 2007
  4. Harald Luessen
    Replies:
    7
    Views:
    280
    =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=
    Jun 27, 2007
  5. anonymous
    Replies:
    1
    Views:
    296
    James Kanze
    Aug 2, 2008
Loading...

Share This Page