Boost logo

Boost Users :

From: Zeljko Vrba (zvrba_at_[hidden])
Date: 2008-08-21 07:16:44


I'm operating on two vectors of pairs of numbers, currently represented by
std::pair<unsigned, unsigned>. The first vector is a list of (net,pin) pairs,
while the second vector is a list of (pin, net) pairs.

In order to raise a bit the understandability / abstraction level of my code, I
think that it'd be nice to be able to write at_key<pin>(x) and at_key<net>(x)
instead of x.first or using tie().

Looking at fusion manual, it seems that of all the containers, map suits the
purpose:

struct pin;
struct net;

First question: are Map1 and Map2 different types?

typedef map<pair<pin, unsigned>, pair<net, unsigned> > Map1;
typedef map<pair<net, unsigned>, pair<pin, unsigned> > Map2;

According to a simple test program that I wrote, which basically boils down to
Map m1; Map m2; m1 = m2; they, are different because the compilation fails.
Hmm, so far, so good.

Second question: some algorithms are common both for both types, e.g. sort,
where I want to have lexicographical comparison between the elements. Is it
possible to somehow transform Map1 and Map2 so that they both appear as

typedef vector<unsigned, unsigned> > Pair

with proper lexicographical ordering? OK, there are conversion metafunctions,
but I want something more; the following code

  std::vector<Map1> m;
  std::sort(m.begin(), m.end());

should process vector elements (Map1s) _as_if_ they were Pairs or ordinary
std::pair. I see there are conversion metafunctions defined in documentation,
but I don't know how to use them to convert std::vector<Map1> to
std::vector<Pair> when giving m as argument to sort() [if this is possible
at all].

Sorry for the long post and if it is somewhat vague.

===

(I could probably avoid using fusion by manually defining two different struct
types, each holding pin/net members and defining operator< for each, but I
want to finally get my hands dirty with fusion on a concrete, not too complex
problem that I'm facing right now.)


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net